当前位置: 首页 > 知识库问答 >
问题:

flie编写后退出JAVA应用程序的正确方法

丁毅庵
2023-03-14

**更新--问题不是文件编写器没有关闭,而是错误地终止了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);
}
}
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)是否有不可预见的后果?

共有1个答案

应煌
2023-03-14

创建UI的Java应用程序在满足某些条件之前不会终止。对于JavaFX应用程序,请确保关闭所有stage实例

 类似资料:
  • 本文向大家介绍Android编程之退出整个应用程序的方法,包括了Android编程之退出整个应用程序的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程之退出整个应用程序的方法。分享给大家供大家参考,具体如下: 我们在写android应用程序时,经常会遇到想退出当前Acitivity,或者直接退出应用程序.我之前的一般操作是按返回键,或者直接按home键直接返回,其实这

  • 我正在开发移动应用程序与离子有飞溅 截至目前,我正在使用以下代码进行配置 此外,我在第一次启动页面上使用了双击退出,下面是一段代码。 所以在启动页面,若我在5秒内点击两次后退按钮,它就会关闭。我可以在“打开的应用程序”列表中看到应用程序仍处于打开状态。(android手机中的第一个或最后一个按钮)。 问题是,如果我在双击退出后重新启动应用程序,那么它会显示一段时间的白屏和启动屏幕(但没有闪屏)。我

  • 问题内容: 使我的PyQt应用程序从控制台中退出时(Ctrl-C),退出的正确方法是什么? 当前(我在处理unix信号方面没有做任何特别的事情),我的PyQt应用程序忽略了SIGINT(Ctrl + C)。我希望它表现良好并在被杀死时退出。我该怎么办? 问题答案: 17.4。signal —设置异步事件的处理程序 尽管就Python用户而言,Python信号处理程序是异步调用的,但它们只能出现在P

  • 我如何以编程方式关闭一个Flutter应用程序?我尝试弹出唯一的屏幕,但结果是黑屏。

  • 问题内容: 在Go中,设置流程退出代码的正确方法是什么? 我尝试将主要功能更改为 但这会导致错误 好的,所以有,但是这会立即中止该过程并且不会干净退出(例如,不执行任何递延操作)。 我还发现它将退出进程并将状态代码设置为非零,这可能是最好的方法,尽管它会将堆栈跟踪信息转储到控制台。 设置退出代码的正确方法是什么? 问题答案: 使最后一个延迟函数执行。延迟函数在周围函数返回之前立即执行,以相反的顺序

  • 问题内容: 我正在开发使用Facebook SDK登录的ios应用程序。我在情节提要中将a设置为初始View Controller,用户从中使用FB帐户登录。 我有另一个ViewController,一旦用户登录,它将正确加载。 我正在检查AppDelegate文件,如果不是nil,则直接加载第二个ViewController,因为用户已经登录。 但是,如果我退出该应用程序并重新启动它,则始终为零