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



我正在使用标签。但是当我使用label.settext("Something")时。它在后台工作,这意味着它设置了字符串,但它不会在屏幕上显示它。你可以问我你是怎么知道的?我使用System.out.println(label.gettext()在我的控制台上检查了它。它给出正确的输出。但是水平没有显示"某物"。

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

对任何 JavaFXNode的每个更改都必须在 FX 应用程序线程中调用。提供的异常解释了这一点。我假设SerialPortEvent是在单独的线程中调用的,这就是您出现异常的原因。要修复该集,LabelPlatform.runLater()中的文本。

法典:

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

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

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

相关内容

最新更新