1

这是较大的图形程序(特别是 JavaPlot)的一部分。简而言之,我会尝试绘制一些图表;该图将出现在

out.write(comms); 

但是一旦它击中就关闭

out.close()

我知道您需要关闭 OutputStreamWriter,因此我没有删除该行,而是创建了一个 Scanner,它一直等到用户按下“Q”,然后程序正常继续,关闭图形、OutputStreamWriter 和 Scanner

        OutputStreamWriter out = new OutputStreamWriter(proc.getOutputStream());
        out.write(comms);
        out.flush();

//added from here
        //waiting until input is given
        Scanner timeKiller = new Scanner(System.in);
        String check = timeKiller.nextLine();
        if(check != "q"){
            check = timeKiller.nextLine();  //<---waiting here. 
        }
        timeKiller.close();
//to here

        out.close();

我在做什么危险吗?如果有人通过关闭窗口来关闭图表,这不会杀死程序,对吗?这不会导致内存泄漏(对吗?),但是如果进程仍在运行并且他们多次运行该程序,它最终将开始成为问题。我怎样才能解决这个问题?就在我的脑海中,也许在窗口关闭时向窗口添加一个监听器,它会中断循环?还是我弄错了,这根本不是问题?

4

2 回答 2

2

如果您在最近一次写入后刷新了流/写入器,那么如果您在没有close先调用流的情况下退出应用程序,则不会丢失任何数据。如果您正在退出应用程序,JVM 将终止并且存储泄漏变得无关紧要。

另一方面,如果您在应用程序应该退出时没有导致应用程序退出,并且因此用户产生了多个实例,那么您将遇到大量 JVM 填满用户 PC 内存的问题。如果发生这种情况,与处理孤立的 JVM 相比,假设的泄漏流是微不足道的。

但是从您的问题中确实不清楚您实际上在做什么和/或打算做什么,所以我不能真正评论您的具体情况。

于 2012-07-13T14:42:48.713 回答
1

该窗口有一个 setDefaultCloseOperation,您可以将其设置为 EXIT_ON_CLOSE,这将执行 System.exit(0)。

于 2012-07-13T14:50:00.703 回答