首页 > 解决方案 > 使用 Java.util.Timer 执行 SQL 查询时 JavaFX 抛出异常

问题描述

我正在使用 java.util.Timer 每 x 秒执行一次 SQL 查询。目的是跟踪某些数据库字段更改并几乎实时更新 UI。但是,当这些更改发生时,JavaFX 会引发以下错误:

线程“Timer-0”java.lang.IllegalStateException 中的异常:不在 FX 应用程序线程上;currentThread = Timer-0

我正在使用 MVC 模型。

看法:

Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            try {
                String status = dataAccessor.getOrderStatus(order.getorderID());
                orderStatusLabel.setText("Order Status: " + status);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }, 0, 2000);

模型:

    public String getOrderStatus(int orderID) throws SQLException {
        Statement getStatus = conn.createStatement();
        ResultSet rs = getStatus.executeQuery(
             "SELECT status FROM the_order WHERE orderID = " + orderID);
        rs.next();
        return rs.getString(1);
    }

为什么会这样?

标签: javamysqlsqljavafxjavafx-8

解决方案


推荐阅读