Последствия попытки убить программу перед закрытием OutputStreamWriter

Это часть большой графической программы (особенно JavaPlot). В скорлупе ореха я бы попытался что-то нарисовать; график появится в

out.write(comms); 

но затем закройте, как только он ударил

out.close()

Я знаю, что вам нужно закрыть OutputStreamWriter, поэтому вместо удаления этой строки я создал сканер, который ожидает, пока пользователь не нажмет "Q", а затем программа продолжит работу в обычном режиме, закроет график, OutputStreamWriter и сканер.

        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();

Что я делаю опасно? Если кто-то закроет график, закрыв окно, это не убьет программу, правильно? Это не приведет к утечке памяти (верно?), Но если процесс все еще выполняется и они запускают эту программу несколько раз, это в конечном итоге станет проблемой. Как я могу это исправить? Может быть, добавьте слушателя к окну, которое прерывает цикл, если окно закрыто? Или я ошибаюсь, и это вообще не проблема?

2 ответа

Решение

Если вы сбросили поток / запись после самой последней записи, вы не потеряете данные, если выйдете из приложения без вызова close в потоке первым. И если вы выходите из приложения, JVM завершается, и утечки памяти становятся неактуальными.

С другой стороны, если вы не заставляете приложение закрываться, когда оно, вероятно, должно завершиться, и в результате пользователь порождает несколько экземпляров, у вас будет проблема с большим количеством JVM, заполняющих память ПК пользователя. Если это произойдет, гипотетический поток утечек будет незначительным по сравнению с работой с потерянными JVM.

Но из вашего вопроса действительно неясно, что вы на самом деле делаете и / или предлагаете делать, поэтому я не могу прокомментировать вашу конкретную ситуацию.

В окне есть setDefaultCloseOperation, которое вы можете установить в EXIT_ON_CLOSE, что будет делать System.exit(0).

Другие вопросы по тегам