Hello,
How do I propagate an exception to the top level object for a non-blocking executor?
In short, I would like to catch the exception thrown in the wait object:
public static void main(String[] args) {
Wait wait = new Wait(5000); //5 seconds
try
{
wait.StartWait(); //return immediately
Thread.sleep(10000); //10 seconds
wait.StopWait();
}
catch (Exception e)
{
System.out.print("Timer timed out.");
}
System.out.print("Success!");
}
I am using a non-blocking future implementation located at: http://www.javacirecep.com/concurrency/java-implement-java-non-blocking-futures/
| public void StartWait() throws ExecutionException, InterruptedException, TimeoutException, Exception { |
| |
| executor = new NonBlockingExecutor(Executors.newSingleThreadExecutor()); |
| NonBlockingFuture<Integer> future = executor.submitNonBlocking(new Callable<Integer>() { |
| @Override |
| public Integer call() throws Exception { |
| Thread.sleep(iTimeout); |
| throw new TimeoutException("Timer Elapsed."); |
| } |
| }); |
| future.setHandler(new FutureHandler<Integer>() { |
| @Override |
| public void onSuccess(Integer value) { |
| System.out.println("Task completed successfully."); |
| } |
| @Override |
| public void onFailure(Throwable e) throws Exception { |
| System.out.println(e.getMessage()); |
| StopWait(); |
| throw new Exception(e.getMessage()); //not caught in main! |
| } |
| }); |
| } |
I have a project that can be downloaded at: https://www.dropbox.com/s/54df16w19pn910l/non-blocking%20exception.zip?dl=0
Why isn't the onFailure exception caught in main?
Does the future variable need to be class-level?
Thank you.
williamj