我的标签设置了任何文字,但我无法在屏幕上看到它,但可以从控制台看到它

时间:2017-07-14 08:33:31

标签: java javafx label

我正在使用标签。但是当我使用label.settext(" Something")时。它在后台工作意味着它设置了字符串但它没有在屏幕上显示它。你可以问我怎么知道这个?我使用System.out.println(label.gettext())在我的控制台上检查了它。它给出了正确的输出。但是这个级别并没有表现出来#34; Something"。

serialPort.addEventListener((SerialPortEvent serialPortEvent) -> {
        try{
            System.out.println("Your selected text for label : "+objectname);
                objectname="Nothing";
            label2.setText(objectname);
            System.out.println("Label gettext : "+label2.getText());    
        }catch(Exception e){
            e.printStackTrace();
        }
}

它给出了 - > java.lang.IllegalStateException:不在FX应用程序线程上; currentThread = EventThread COM5

2 个答案:

答案 0 :(得分:1)

必须在FX应用程序线程中调用对任何JavaFX Node 的每次更改。提供的例外解释了这个我假设在单独的线程中调用SerialPortEvent,这就是你得到异常的原因。要修复Label中的Platform.runLater()文集。

CODE:

serialPort.addEventListener((SerialPortEvent serialPortEvent) -> {
    try {
        System.out.println("Your selected text for label : " + objectname);
        objectname = "Nothing";
        Platform.runLater(() -> {
            label2.setText(objectname);
        });
        System.out.println("Label gettext : " + label2.getText());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

答案 1 :(得分:0)

最后,这对我有用: 因为我在一个单独的线程中调用SerialPortEvent,所以它需要使用Platform.runLater(() - > {}); 正确的代码如下:

Platform.runLater(() -> {
                        if(objectname!= null){
                            System.out.println("Previousobject : "+previousobject);
                        label2.setText(previousobject);
                        }
                    });