You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:42:00