2015-03-13 20 views
0

我有一个要执行的Task,并且提交给缓存线程池ExecutorService。它运行平稳,但我需要能够检索其可回收价值。这怎么能做到?JavaFX:使用执行程序在线程池中运行时任务的可返回值

样品的编号:

ExecutorService threadPool = Executors.newCachedThreadPool(runnableTask -> { 
    Thread thread = new Thread(runnableTask); 
    thread.setDaemon(true); 
    return thread; 
}); 
Button btn = new Button("Run Task"); 
btn.setOnAction(actionEvent -> { 
    try { 
     Object get = threadPool.submit(new Task<String>() { 
      @Override 
      protected String call() throws Exception { 
       //simulating long-running task 
        Thread.sleep(3_000); 
       //return result 
        return "Warren Nocos"; 
      } 
     }).get(); 
     System.out.println(get); 
    } catch (InterruptedException | ExecutionException ex) { 
     logger.log(Level.SEVERE, ex.getMessage(), ex); 
    } 
}); 

的输出是零。

回答

2

使用onSucceeded()回调(这将在JavaFX应用程序线程中执行):

Button btn = new Button("Run Task"); 
btn.setOnAction(actionEvent -> { 
    Task<String> task = new Task<String>() { 
     @Override 
     protected String call() throws Exception { 
      //simulating long-running task 
       Thread.sleep(3_000); 
      //return result 
       return "Warren Nocos"; 
     } 
    }; 
    task.setOnSucceeded(event -> { 
     String result = task.getValue(); 
     System.out.println(result); 
    }); 
    task.setOnFailed(event -> { 
     task.getException().printStackTrace(); 
    }); 
    threadPool.execute(task); 
}); 
相关问题