Discussions
Categories
- 196.8K All Categories
- 2.2K Data
- 239 Big Data Appliance
- 1.9K Data Science
- 450.3K Databases
- 221.7K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 550 MySQL Community Space
- 478 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3K ORDS, SODA & JSON in the Database
- 544 SQLcl
- 4K SQL Developer Data Modeler
- 187K SQL & PL/SQL
- 21.3K SQL Developer
- 295.8K Development
- 17 Developer Projects
- 138 Programming Languages
- 292.5K Development Tools
- 107 DevOps
- 3.1K QA/Testing
- 646K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 155 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.1K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 18 Java Essentials
- 160 Java 8 Questions
- 86K Java Programming
- 80 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.3K Java SE
- 13.8K Java Security
- 204 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 439 LiveLabs
- 38 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 171 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 232 Portuguese
How to do I propagate an exception from a Java 8 future eventhandler?

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