简体   繁体   中英

FX Task, returning a value always returns null

I am trying to return a String from a FX Task.

Expected output: true,testABC.

Real output: true,null.

The call to the task:

    public static void main(String[] args) {
    ExecutorService pool = Executors.newCachedThreadPool();
    Future<String> my_String = (Future<String>) pool.submit(new my_task());

    try {
        Thread.sleep(500);
        System.out.println(my_String.isDone());
        System.out.println(my_String.get());//gettings the String from the future
    } catch (InterruptedException | ExecutionException ex) {
        Logger.getLogger(Return_test.class.getName()).log(Level.SEVERE, null, ex);
    }}

The task:

public class my_task extends Task<String>{

@Override
protected String call() throws Exception {
    String tempString = "testABC";
    return tempString;
}}

Task implements Runnable , but not Callable . So when you call pool.submit(myTask) , you are calling the overloaded form of ExecutorService.submit(...) taking a Runnable . In general, of course, Runnable s do not return values, so the Future that is returned from that version of submit(...) , as Aerus has already pointed out, just returns null from its get() method (it cannot get a value from the Runnable ).

However, Task also extends FutureTask directly, so you can use your task directly to get the result. Just do

Task<String> myTask = new my_task(); // Please use standard naming conventions, i.e. new MyTask();
pool.submit(myTask);

try {
    // sleep is unnecessary, get() will block until ready anyway
    System.out.println(myTask.get());
} catch (InterruptedException | ExecutionException ex) {
    Logger.getLogger(Return_test.class.getName()).log(Level.SEVERE, null, ex);
}

From the submit Javadoc:

The Future's get method will return null upon successful completion.

(Emphasis mine)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM