JavaFX Alert不显示:jserialcomm接收Arduino信号后无法弹出弹窗
问题原因
- jserialcomm的
serialEvent回调由独立后台线程触发,不属于JavaFX UI线程 - JavaFX规定所有UI组件的创建、展示、修改操作必须在JavaFX Application Thread中执行,跨线程操作UI会导致渲染失效、无响应甚至抛出异常,你遇到的Alert不弹出就是典型的跨线程操作UI问题
解决方法
将showAlert方法中的UI操作包裹在Platform.runLater()中,提交给JavaFX UI线程排队执行即可,修改后的代码参考如下:
import javafx.application.Platform; @Override public void serialEvent(SerialPortEvent serialPortEvent) { if (serialPortEvent.getEventType() == SerialPort.LISTENING_EVENT_DATA_RECEIVED) { byte[] temp = serialPortEvent.getReceivedData(); String message = new String(temp); message = message.trim(); doneMessage = message; System.out.println(message); showAlert(); } } public void showAlert () { System.out.println("Hello"); // 将UI操作提交到JavaFX主线程执行 Platform.runLater(() -> { Alert alert = new Alert(Alert.AlertType.CONFIRMATION); alert.showAndWait(); }); }
内容的提问来源于stack exchange,提问作者Connor London
相关产品推荐
相关产品推荐

