gpt4 book ai didi

java - flie write后退出JAVA应用程序的正确方法

转载 作者:行者123 更新时间:2023-12-01 07:21:33 25 4
gpt4 key购买 nike

**更新---问题不是文件编写器未关闭,而是 Java 应用程序错误终止。我已经更新了问题。

我有以下类启动 JAVAFX Web View 并向 Web View 的 html 公开一些 java 对象。

public class FileSystemBridge {

private void writeToFile(String[] fileContents){

if (content!=null){

String fileName ="pathToFile";
BufferedWriter fileWriter;
for (int i =0; i<fileContents.length(); i++ ){
String fileContent fileContents[i]);
try {
fileName = fileName+Integer.toString(i)+".txt";
fileName = fileName.replaceAll("\\s","");
System.out.println(fileName);
File f= new File(filesDir+"/"+fileName);
f.createNewFile();
fileWriter = new BufferedWriter(new FileWriter(f));
fileWriter.write("");
fileWriter.write(fileContent);

fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
System.out.println("in the exception!");
e.printStackTrace();
}
}

}
else {
System.out.println("no content");
}
System.out.println("done writing, exit app now");

}

public void exit(){
System.out.println("EXITING!");
Platform.exit();
System.exit(0);
}
}

上面的类还有其他成员类,它们充当 POJOS,以将正在读/写的文件结构公开给“前端”html。

我通过重写默认的 Browser 类构造函数并添加以下代码将 FileSystemBridge 的实例传递到 Web View 。

webEngine.getLoadWorker().stateProperty().addListener(
(ObservableValue<? extends State> ov, State oldState,
State newState) -> {

if (newState == State.SUCCEEDED) {
JSObject context= (JSObject) webEngine.executeScript("window");
context.setMember("fsBridge", new FileSystemBridge());
webEngine.executeScript("init('desktop')");//the hook into our app essentially

}
});

webEngine.executeScrit("init) 本质上是在我们的前端执行一些初始化。然后,在用户交互时在 webview 上执行的 javascript 上,我们调用 FileSystemBridge write 方法,并通过回调来调用 FileSystemBridge 的 exit 方法,这本质上是对 Platform.exit() 的调用。

用户点击时

App.handleWrite(contentToBeWritten, function(success){
if (success){
console.log("inside success!");
App.handleExit();
}
});

然后我们的handleWrite javascript函数

handleWrite: function(content, callback){
fsBridge.callWrite(content);
retVal = true;//more logic to this but simplified for demo
callBack(retVal);
}

现在在 FileSystemBridge.exit() 方法中,我添加了 System.exit(0),它成功终止了我的 java 实例,这是最初的问题。但是我想知道这是否是处理退出的正确方法使用 JAVAFX webview 的 java 应用程序的示例。以这种方式使用 System.exit(0) 是否会产生不可预见的后果?

最佳答案

创建 UI 的 Java 应用程序在满足某些条件之前不会终止。对于 JavaFX 应用程序,make sure you are closing all Stage instances.

关于java - flie write后退出JAVA应用程序的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35587648/

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