我正在使用标签。但是当我使用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
答案 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);
}
});