Управление JavaFX GUI из других методов?

По сути, я создаю программу, которая синхронизирует источники света HUE, и у меня возникают проблемы с включением прослушивателя, который обнаруживает, когда мост подключен к моему графическому интерфейсу JavaFX; Я хочу, чтобы метка переключалась с "Не подключено" на "Подключено" всякий раз, когда слушатель обнаруживает, что он подключен.

Вот некоторый псевдокод того, как программа структурирована.

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();
}

По сути, метка не меняется, когда слушатель активен, и я не уверен, как это сделать.

Спасибо!

1 ответ

Используйте подходящий Worker установить соединение с мостом. выберите Task за одну единицу работы; выбирать Service управлять несколькими задачами. Используйте задачу updateMessage() способ уведомить работника message собственность слушателей. Вы можете передать ссылку на метод обновления на ваш HueLightsListener, как показано здесь.

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

Ваша реализация onConnectionResponds() может тогда сказать ссылку на accept() сообщения по мере необходимости.

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

Кроме того, ваша реализация call(), который работает в фоновом режиме, может периодически опрашивать соединение, одновременно проверяя isCancelled(), а затем отправьте больше команд после подключения.

Другие вопросы по тегам