我正在使用标签。但是当我使用 label.settext("Something") 时。它在后台工作,这意味着它设置了字符串,但不会在屏幕上显示它。你可以问我你是怎么知道这个的?我使用 System.out.println(label.gettext()) 在控制台上检查了它。它给出了正确的输出。但关卡并未显示“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 应用程序线程上;当前线程 = EventThread COM5
最佳答案
对任何 JavaFX Node
的每次更改都必须在 FX 应用程序线程中调用。提供的异常(exception)解释了这一点。我假设 SerialPortEvent
在单独的线程中调用,这就是您收到异常的原因。要修复在 Platform.runLater()
中设置 Label
文本。
代码:
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();
}
}
关于java - 我的标签设置了任何文本,但我在屏幕上看不到它,但可以从控制台看到它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45098340/