сделать графический интерфейс javafx показывать и скрывать, посылая команды через сокет - PullRequest
0 голосов
/ 22 ноября 2018

Прямо сейчас у меня есть решение - иметь очередь, и когда что-то проходит через сокет, ставит его в очередь, а затем вызывает stage.hide () или stage.show (), в зависимости от того, что это такое.Но у меня возникли проблемы с реализацией.У меня есть что-то вроде этого:

private BlockingQueue<String> requests; 
private Stage primaryStage;

public GraficInterface() {
        requests = new LinkedBlockingQueue<String>();
    }

@Override
    public void start(Stage sp) {
        try {   
            this.primaryStage = sp;
            Parent root = FXMLLoader.load(getClass().getResource(...));
            Scene scene = new Scene(root);
            primaryStage.setScene(scene);
            primaryStage.sizeToScene();
            primaryStage.show();

        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        Thread stopper = new Thread(new Runnable() {
            public void run() {
                String message;
                while (true) {
                    try {
                        message = requests.take();
                        if (message.equalsIgnoreCase("show")) {
                            primaryStage.show();
                        } else if (message.equalsIgnoreCase("hide")) {
                            primaryStage.hide();
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } 

                }
            }
        });
        stopper.start();

        launch();   
    }


    public void addToGraficThread(String string) {
        try {
            this.requests.put(string);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

В очереди все работает нормально, но я получаю java.lang.NullPointerException, когда я primaryStage.show() или primaryStage.hide()

Что япытаясь сделать это возможно?Есть ли другой способ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...