2017-05-09 23 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