2016-05-14 60 views
1

对不起,英语不好。我是JavaFX的新手。我正在用COM端口编写一个JavaFX应用程序。我发送AT命令并从COM端口获得响应,然后初始化一些变量。在这个控制器中有3个方法用来初始化3个变量。JavaFX应用程序UI响应

private void findModemPorts() { 
     // send 4 AT command then 
     // get response & initialize myPort 
     myPort = "XXXX"; 
    } 

    private void findNumber() { 
     // send 4 AT command then 
     // get response & initialize myNumber 
     myNumber= "XXXX"; 
    } 

private void currentBalanc() { 
     // send 10 AT command then 
     // get response & initialize currentBalance 
     currentBalance ="XXXX"; 
    } 

运行该应用程序时在buttonAction事件

@FXML 
private void handleStartButtonAction(ActionEvent event) { 
    pin = text_field_pin.getText(); 

    backgroundThread = new Service<Void>() { 
     @Override 
     protected Task<Void> createTask() { 
      return new Task<Void>() { 
       @Override 
       protected Void call() throws Exception { 

        findModemPorts(); 
        findModemPorts(); 
        currentBalanc(); 

        return null; 
       } 
      }; 
     } 
    }; 
    backgroundThread.setOnSucceeded(new EventHandler<WorkerStateEvent>() { 
     @Override 
     public void handle(WorkerStateEvent event) { 
      level_oparetor.setText(myOparetor); 
      level_number.setText(myNumber); 
      level_current_balance.setText(currentBalance); 
     } 
    }); 

    backgroundThread.start(); 
} 

现在把这块3方法完成任务的整个紧靠30秒然后在一次3级组文本得手。但是我想在每个层次初始化一个值之后设置文本。请帮帮我。提前致谢。

回答

1

你可以做@Dvarga说的,或者你可以利用在JavaFX应用程序线程上运行你的代码的Platform.runLater

@Override 
protected Void call() throws Exception { 
    findModemPorts(); 
    Platform.runLater(() -> level_oparetor.setText(myOparetor)); 
    findModemPorts(); 
    Platform.runLater(() -> level_number.setText(myNumber)); 
    currentBalanc(); 
    Platform.runLater(() -> level_current_balance.setText(currentBalance)); 
    return null; 
} 
+0

在三个不同的线程中运行三个AT命令是不是更快得到响应“平行”?我只是好奇:) – DVarga

+0

非常感谢@IchichiUchiha – crazyCoder

+0

@Darga那么取决于OP的用例;) – ItachiUchiha

0

用三种不同的OnSucceed处理程序调用三种不同任务的方法,因此三次更新将是相互独立的。