gpt4 book ai didi

java - 如何捕获 java fx 应用程序中的任务异常?

转载 作者:行者123 更新时间:2023-11-30 06:51:19 24 4
gpt4 key购买 nike

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import javafx.concurrent.Task;


public class T {

public static void main(String[] args) {

ExecutorService executorService = Executors.newSingleThreadExecutor();

Task t = new Task(){

@Override
protected Object call() throws Exception {
System.out.println(1/0);
return null;
}

};

//My progresss Bar in JavaFX
//Progressbar.progressProperty().bind(t.progressProperty());

Future future = executorService.submit(t);

try {
future.get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //returns null if the task has finished correctly.

executorService.shutdown();


}
}

我有一个类似于这样的代码我的代码任务在对象调用中有内部方法调用抛出 sql 异常但我永远无法在 Executor 服务中捕获它也在提交调用之上我有一个 javafx 的进度条但是使用 future 时似乎也像主 ui 挂起一样卡住了。没有 future ,进度条会起作用。

最佳答案

Future.get 是一个阻塞调用。这就是 UI 挂起的原因。

不要使用Future 来获取结果。而是使用 TaskonSucceeded 事件处理程序。 onFailed 事件处理程序可用于获取异常。示例:

t.setOnSucceeded(evt -> System.out.println(t.getValue()));
t.setOnFailed(evt -> {
System.err.println("The task failed with the following exception:");
t.getException().printStackTrace(System.err);
});
executorService.submit(t);

顺便说一句:两个处理程序都在 JavaFX 应用程序线程上运行,因此可以安全地用于修改 UI 以向用户显示结果/错误。

关于java - 如何捕获 java fx 应用程序中的任务异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40300089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com