我有一个接口方法boolean right()
,如果它在一秒内没有“回答”,它应该返回false。
答案 0 :(得分:4)
是的,这可以用例如java.util.concurrent.Future<V>
(标准interface
表示类型V
的异步计算的结果),并与方法get(long timeout, TimeUnit unit)
结合使用。除了其他异常之外,该方法可以抛出TimeoutException
,但在正常执行时返回计算结果。
在这种情况下,您需要一个Future<Boolean>
,get(1, TimeUnit.SECONDS)
块中的try-catch
,根据您的规范处理TimeOutException
。
可用的具体实现是FutureTask<V>
和SwingWorker<T,V>
。如果这是在Swing应用程序的上下文中,那么你想要使用后者。
答案 1 :(得分:3)
嗯,你不能把这个要求放在界面本身,但是如果你控制主叫方那就可能:
答案 2 :(得分:3)
当然,不可能将其添加为静态检查(在编译时,编译器可以检查以确保它),因为运行操作需要多长时间取决于程序所在的运行时环境跑进来。
您可以使用java.util.concurrent
中的类来运行操作并等待它在特定超时内完成。一个简单的例子(没有经过全面测试,但证明了这个想法):
ExecutorService exec = Executors.newSingleThreadExecutor();
Future<Integer> future = exec.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
Thread.sleep(10000);
return 123;
}
});
try {
// Run the callable, wait for max. 5 seconds
System.out.println(future.get(5, TimeUnit.SECONDS));
}
catch (TimeoutException ex) {
System.out.println("The operation took too long!");
}
答案 3 :(得分:1)
不可能。这是特定于实现的行为。