在JavaFX场景构建器中执行大任务而不冻结

时间:2016-01-10 19:19:10

标签: java multithreading javafx netbeans-8 scenebuilder

我是JavaFX的新手。我正在使用JavaFX和使用Netbeans IDE的场景构建器开发桌面应用程序。

这是我的应用程序用户界面(我没有显示屏幕截图的声誉)。

  1. 一个名为&#34的复选框;点击此处启用文本框" (显示在复选框的右侧)

  2. 一个文本框(默认情况下应禁用此选项,如果用户单击/选中复选框,则应具有写入选项;即启用)

  3. 一个按钮名称"做大任务" - 此按钮执行主要任务,此任务很长。 (ssh连接已完成,脚本从Java类调用到远程机器,此脚本调用另外两个scrpts并最终完成,所有进程的日志都记录在名为output.log的文件中)

  4. 另一个名为&#34的按钮;显示日志" (意图是显示output.log live [执行时写入]),然后是一个大文本字段(应显示日志)

  5. 和进度条(将显示从script1到脚本n进度的调用)

  6. 以下是我的FXMLDocumentController.java类:

    @FXML
    Button btnDotheBigtask;
    
    @FXML 
    Button btnShowLogs;
    
    @FXML 
    TextArea txtShowLogs;
    
    @FXML 
    TextField txtMyText;
    
    @FXML 
    CheckBox clickHeretoEnableTextBox;
    
    
    @FXML
    public void btnDotheBigtaskClick(ActionEvent event) throws IOException {        
        //CreateRelease create = new CreateRelease();
        MyClassImpl m = new MyClassImpl();
        m.doTheWork();
    
    }
    
    @FXML
    public void btnShowLogs(ActionEvent event) throws IOException {        
    
    
    }
    
     @FXML
    public void clickHeretoEnableTextBox(ActionEvent event) throws IOException {
    
    }
    
    @FXML
    public void txtAreaShowLogs(ActionEvent event) throws IOException {
    
    }
    
    @FXML
    public void txtMyText(ActionEvent event) throws IOException {
    
    }
    

    MyClassImpl.java执行主要任务[我使用SSHExecute 1.0 jar建立ssh连接]

            ConnBean cb = new ConnBean("RemoteServer", "user","password");
            // Put the ConnBean instance as parameter for SSHExec static method getInstance(ConnBean) to retrieve a singleton SSHExec instance
            ssh = SSHExec.getInstance(cb);          
            //Connect to server
            ssh.connect();
    
           CustomTask sampleTask = new ExecCommand("/usr/Test/myscript.sh");
    
    
            //Execution of main taks
            Result rs = ssh.exec(sampleTask);
    

    我想做的是:

    1. 默认情况下,文本框应该已废弃,单击复选框时应启用该文本​​框。
    2. 单击btnDotheBigtaskClick按钮时,UI不应该冻结,当我点击此按钮时,应在标签中显示消息,例如"工作已开始..." (我将在稍后创建)并且在完成整个任务标签值之后应该更新为" Work Done"。
    3. 点击“显示日志”按钮后,日志应该显示在文本字段中。 (UI不应该在那时冻结)
    4. 基本上我已经执行了很多任务来实现这个并检查我失败的地方

      1. 大任务顺利执行(因为我使用了java标准线程)但未能显示日志,当我点击show log按钮时UI被冻结。 (在showLogs上我已经阅读了日志文件并试图在文本中打印)

      2. 我无法在控制器类中出现的标签中显示/设置来自不同类(MyClassImpl)的工作已完成/已启动的消息。

      3. 任何人都可以帮助我完成这项任务的概念或代码(代码将更容易理解)。

0 个答案:

没有答案