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

标签 java io filewriter

**更新---问题不是文件编写器未关闭,而是 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/

相关文章:

java - 如何在 JNI 中将事件/信号从 C 发送到 Java

java - 不可预测的文件写入器

在 C 中逐个字符比较文本文件

java - BufferedWriter write() 方法不起作用

java - createNewFile() 后忽略的方法

java - 将 java 输出写入控制台和文本文件的更简单方法?

Java写入目录只会创建文件

java - 如何在 Eclipse View 中显示网页

java - 以矩阵格式打印二维数组java

java - 上次运行的 tomcat 类仍然存在