【发布时间】:2016-06-05 21:16:53
【问题描述】:
**UPDATE---问题不是文件编写器没有关闭而是Java应用程序的错误终止。我已经更新了问题。
我有以下类启动 JAVAFX Web 视图并将一些 java 对象暴露给 Web 视图的 html。
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 视图。
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 的退出方法,这本质上是调用 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?
-
您的程序是否打印“完成写入”行(以及之前的所有预期文件名)?你说'在命令行中它仍在等待输入' - 这让我怀疑问题不在于文件写入。
-
这可以编译吗?例如,当 i==2 时,
filename会得到什么?主线长什么样? -
这是在 javaFX Web 视图中执行的,并且正在从 Web 视图 javascript 调用 write 方法。但是我已经通过 System.out.prints 验证了函数返回,程序执行终止。无论出于何种原因,尽管 java 实例没有终止
标签: java io filewriter