我正在使用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);
}
为什么会这样?