2017-08-26 65 views
-2

基本上,我正在創建一個同步HUE燈光的程序,而且我無法將檢測Light Bridge與我的JavaFX GUI連接的偵聽器整合在一起;我希望它可以在偵聽器檢測到它已連接時將標籤從「未連接」切換到「已連接」。從其他方法控制JavaFX GUI?

下面是程序結構的一些僞代碼。

public class MainClass extends Application { 

boolean connected; 
Label label; 

public static void main(){ 
    launch(args);      //Neccesary to start JavaFX 
} 

public static void start(){ 
    ConnectToHueLights();    //Takes abt 30s to connect to bridge 
    Label label = 「Searching for connection」;  //Message while connecting 
    Window.addLabel();     //Adds label to hue lights 
    Window.show();     //Makes window visible 
} 

private HueLightsListener(){ 
    //Once connected, can do whatever inside of a void method inside of this Listener 
    private void onConnectionResponds(){ 
     label = 「Connected」 
     connected = true; 
    } 
} 

public void ConnectToHueLights(){ 
    create new Listener(); 
} 

基本上,標籤不改變,只要聽者是積極的,而且我不知道該怎麼做。

謝謝!

+0

我很陛下tje代碼甚至不編譯... – fabian

+0

是的,我知道,這是僞代碼。我只想知道爲什麼JavaFX不會讓我更新start()方法以外的標籤,以及如何去做。實際代碼很複雜,因爲GUI有多大以及HUE燈的工作原理 –

+0

您是否在'Listener'中添加了'System.out.println(「Hello!);'以確保它彈出? – Sedrick

回答

1

使用合適的Worker建立到橋的連接。對於單個工作單元選擇Task;選擇Service來管理多個任務。使用任務的updateMessage()方法通知工作人員的message屬性偵聽器。您可以將參考更新方法傳遞給您的HueLightsListener,如here所示。

HueLightsListener listener = new HueLightsListener(this::updateMessage); 

你實現onConnectionResponds()能夠告訴你這個參考accept()消息的需要。

public void onConnectionResponds() { 
    updater.accept("Connected"); 
    … 
} 

順便說一句,你的實現call(),它在後臺運行,可以定期輪詢連接,同時檢查isCancelled(),然後再發送一次連接多個命令。