2017-08-26 4 views
-2

基本的には、HUEライトを同期させるプログラムを作成しています。ライトブリッジが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

私はかなり恥ずかしがり屋のコードはコンパイルされていません... – fabian

+0

ええ、私は知っている、これは擬似コードです。私は、JavaFXがなぜstart()メソッドの外部からラベルを更新することができないのか、それをどうやって行うのかを知りたいだけです。実際のコードは、GUIの大きさとHUEの照明の仕組みのために複雑です –

+0

'Listener'に' System.out.println( "Hello!);'を追加してポップされていることを確認しましたか? – Sedrick

答えて

1

適切なWorkerを使用して、ブリッジへの接続を確立します。 1つの作業単位にTaskを選択してください。複数のタスクを管理するにはServiceを選択します。タスクのupdateMessage()メソッドを使用して、ワーカーのmessageプロパティリスナーに通知します。 hereのように、更新メソッドへの参照をHueLightsListenerに渡すことができます。

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

、必要に応じてonConnectionResponds()の実装では、accept()メッセージへの参照を伝えることができます。バックグラウンドで実行さcall()の脇に、あなたの実装として

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

、定期的にisCancelled()を確認しながら、接続をポーリングして、一度接続複数のコマンドを送信することができます。

関連する問題