javafx后台线程问题?

时间:2014-03-12 10:57:42

标签: multithreading concurrency javafx synchronous

我试图在我的javaFX应用程序的开头启动后台线程,但我的UserInterface(UI)仍然冻结。这就是我在做的事情:

Task task = new Task<Void>() {
    @Override protected Void call() throws Exception {         
            Platform.runLater(new Runnable() {
        @Override
        public void run() {
            try {

                Class.forName("org.sqlite.JDBC");
                Connection c = DriverManager.getConnection("jdbc:sqlite:visuAgent.db");
                c.setAutoCommit(false);
                Statement stmtt = c.createStatement();

                ResultSet rs = stmtt.executeQuery( "select max(num_step) from avoir_continent " );               
                rs.close();
                stmtt.close();

            } catch (ClassNotFoundException ex) {
                Logger.getLogger(rafraichirbd.class.getName()).log(Level.SEVERE, null, ex);
            } catch (SQLException ex) {
                Logger.getLogger(rafraichirbd.class.getName()).log(Level.SEVERE, null, ex);
            }        
        }
   });       
        return null;
    }
};  

                Thread th = new Thread(task);
                th.setDaemon(true);
                th.start(); 

有什么想法吗?谢谢。

1 个答案:

答案 0 :(得分:1)

您在任务Platform.runLater()中使用call()。 Platform.runLater()takes you back to the UI thread

尝试删除它,同时进行计算并仅在需要更新UI上的某些数据时使用它