【问题标题】:Controlling JavaFX GUI from Other Methods?从其他方法控制 JavaFX GUI?
【发布时间】:2017-12-14 09:42:17
【问题描述】:

基本上,我正在创建一个同步 HUE 灯的程序,但我无法合并侦听器来检测灯桥何时与我的 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();
}

基本上,只要监听器处于活动状态,标签就不会改变,我不知道该怎么做。

谢谢!

【问题讨论】:

  • 我很帅,代码甚至无法编译...
  • 是的,我知道,这是伪代码。我只想知道为什么 JavaFX 不允许我从 start() 方法之外更新标签以及如何去做。由于 GUI 有多大以及 HUE 灯的工作方式,实际代码很复杂
  • 您是否在Listener 中添加了System.out.println("Hello!); 以确保它弹出?
  • 不,我知道正在调用侦听器,因为我可以执行 System.out.println("Connected");你是对的,我认为它没有更新,因为它不在 start() 方法中,但是你建议如何更新它或让监听器传播到 start() 方法?

标签: java user-interface javafx philips-hue light


【解决方案1】:

使用合适的Worker 建立与网桥的连接。单个工作单元选择Task;选择Service 管理多个任务。使用任务的updateMessage() 方法通知worker 的message 属性监听器。您可以将更新方法的引用传递给您的HueLightsListener,如here 所示。

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

然后,您的onConnectionResponds() 实现可以根据需要告诉对accept() 消息的引用。

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

顺便说一句,您在后台运行的call() 实现可以定期轮询连接,同时检查isCancelled(),然后在连接后发送更多命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    相关资源
    最近更新 更多