Java 当发生异常时,ExecutorService runnable从不点击try

Java 当发生异常时,ExecutorService runnable从不点击try,java,java-8,lwjgl,Java,Java 8,Lwjgl,我正在尝试使用CompletableFuture来响应正在创建的LWJGL OpenGL上下文。这是通过调用LWJGLGameWindow上的open方法来实现的。以下是相关代码: @Override public CompletableFuture<?> open() { CompletableFuture<Void> future = new CompletableFuture<>(); scheduledExecutorServ

我正在尝试使用
CompletableFuture
来响应正在创建的LWJGL OpenGL上下文。这是通过调用
LWJGLGameWindow
上的
open
方法来实现的。以下是相关代码:

  @Override
  public CompletableFuture<?> open() {
    CompletableFuture<Void> future = new CompletableFuture<>();

    scheduledExecutorService.schedule(() -> {
      future.completeExceptionally(new TimeoutException("Could not establish contact with LWJGL"));
    }, 2000, TimeUnit.MILLISECONDS);

    scheduledExecutorService.execute(() -> {
      try {
        display.setDisplayMode(new DisplayMode(defaultWidth, defaultHeight));
        display.create();
        future.complete(null);
      } catch (LWJGLException e) {
        future.completeExceptionally(e);
      }
    });
    return future;
  }
@覆盖
公共可完成的未来开放(){
CompletableFuture=新的CompletableFuture();
scheduledExecutorService.schedule(()->{
future.CompleteException(新的TimeoutException(“无法与LWJGL建立联系”);
},2000,时间单位为毫秒);
scheduledExecutorService.execute(()->{
试一试{
display.setDisplayMode(新的显示模式(默认宽度、默认高度));
display.create();
future.complete(空);
}捕获(LWJGLEXE){
未来。完全例外(e);
}
});
回归未来;
}
其想法是推迟在预定的executor服务上创建显示。这被设置为单线程调度执行器服务,因为OpenGL上下文是线程绑定的。如果连接到LWJGL的时间太长,那么返回的未来将很早自行中断

问题是,在单元测试中,这是绝对顺利的。但是,当我尝试调试程序时,对任何
display
方法的任何调用都会导致lwjgl引发一个真正的异常(因为我的lwjgl库没有链接。尽管如此,它仍然作为
LwjglException
引发)。出于某种原因,在这里的代码中,这个异常不是从try-catch中提取的,而是被吞没的;未来的永远不会完成

因此,在这段代码中的某个地方,我的异常被吞没了

注意:
display
仅仅是LWJGL的
display
周围的一个界面,没有什么奇妙的魔力
scheduledExecutorService
是单线程计划执行器


我还感谢
scheduledExecutorService
上的
.submit()
schedule
都返回
Future
,但这缺少我想在
CompletableFuture
中使用的组合。如果可能的话,我希望能够继续使用它。

代码实际上完全按照它应该的方式工作。真正的问题是我所期望的错误,
java.lang.UnsatifiedLinkError
,不是一个
异常
,而是一个
错误
。修改代码以捕获可丢弃的
解决了此问题