【问题标题】:UI goes not responding in JavaFxUI 在 JavaFx 中没有响应
【发布时间】:2017-10-07 14:28:00
【问题描述】:

我们有与网络设备集成的应用程序,用于性能和调整相关功能。

我们使用 JavaFx For UI,当我连接到网络设备时,登录并获得 UI 显示“无响应”的响应。

任何人都可以建议如何解决这个问题。Login screen shows not respongding

【问题讨论】:

    标签: java windows user-interface javafx parallel-processing


    【解决方案1】:

    UI 没有响应,因为程序正在连接到网络设备并且 UI 正在同一个 Thread 中运行。您需要启动一个新的Thread 来连接网络设备。当 UI 和与网络设备的连接在两个不同的线程中时,UI 不会冻结。

    class YourThread extends Thread{  
        public void run(){  
            // Your code to connect to network device
        }
    
        public static void main(String args[]){  
            YourThread thread = new YourThread();   
            thread.start();  
        }  
    }
    

    【讨论】:

    • 是的,我明白,但我们有多个命令以多种方式发送到网络设备,我无法将其放入 线程,您能否建议在 UI 组件中解决问题。 .?
    • 您可以创建一个弹出窗口(一个新的 JavaFXScene),向您的用户显示您的应用程序现在正在处理登录。您可以实现一个进度条。然后将所有连接代码放入Scene。连接完成后,那个Scene就消失了。
    • @user2964628 “我们有多个命令以多种方式发送到网络设备,我无法放入线程”。为什么不呢?
    【解决方案2】:

    通过缓慢且不稳定的通道(例如(但不限于)网络)完成的任何 I/O 都必然会提供无响应的用户界面。因此,任何重要的 I/O 都应该在单独的线程中完成。

    您有一些选择:

    • 开始一个新线程
    • 创建一个 JavaFX TaskService,在用户反馈和任务进度反馈中提供最简单的集成
    • 使用 java 8 的 CompletableFuture 或其中的一个链
    • 使用响应式编程(或多或少是 CompletableFuture)

    另请参阅:Concurrency in JavaFX

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多