我正在开发一个JavaFx应用程序,我有一个脚本提取zip,然后执行其他操作,如更新文件等。
我希望有一个textArea显示在后台进行的操作,例如" Zip提取...","更新xyz文件"等
直到现在我尝试了以下方式:
MyTask<String> task;
task = new MyTask<String>() {
@Override
protected String call() throws Exception {
File path = new File(exportTo.getAbsolutePath());
updateMessage("Extracting modular app to target directory...");
patcher.unZip(appPath.getAbsolutePath(), path.getAbsolutePath());
if (path.exists()) {
AppInfo info = getAppInfo();
patcher.patchAndroid(info, resourceZip, new File(path.getAbsolutePath() + "/" + appPath.getName().substring(0, appPath.getName().lastIndexOf("."))), this);
showOkAlert("Build completed!");
} else {
showOkAlert("Modular app folder not found");
}
return "";
}
@Override
protected void updateProgress(double workDone, double max) {
patcher.reportLogs(message);
}
private String message;
@Override
public void updateMessage(final String message) {
Platform.runLater(() -> patcher.reportLogs(message));
this.message = message;
//updateProgress(0, 0);
}
};
task.run();
MyTask类
abstract class MyTask<T> extends Task<T> {
abstract public void updateMessage(String message);
}
我尝试过使用updateProgress方法,Platform.runLater()但没有任何工作。
在所有操作完成后,我将在textArea中打印所有消息。
请帮忙。
答案 0 :(得分:2)
作为Task州的javadoc,您需要手动创建Thread
来执行Task
:
Thread th = new Thread(task);
th.start();
目前,您的task
正在Application UI线程上运行并阻止UI更新。