2017-05-09 54 views

回答

1

由于程序连接到网络设备并且用户界面正在同一个Thread中运行,UI不响应。您需要启动一个新的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(); 
    } 
} 
+0

是的,我理解,但我们必须有多个命令发送到网络设备中,我不能把一个*线程*多种方式,您可以在UI组件建议的解决方法..? – user2964628

+0

您可以创建一个弹出窗口(一个新的JavaFX'Scene'),向用户显示您的应用程序正在处理登录。你可以实现一个进度条。然后你把所有的连接代码放到'Scene'中。连接完成后,该“场景”消失。 – Sky

+0

@ user2964628“我们有多种命令以多种方式发送到网络设备,而我无法放入一个线程”。为什么不? –

1

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

你们中有些人有三种选择:

  • 启动一个新的线程
  • 创建一个JavaFX TaskService,提供用户反馈和任务进度反馈
  • 使用Java 8的CompletableFuture最简易的整合,或者这些链条
  • 使用反应式编程(可完成或多或少可完成)

参见:Concurrency in JavaFX