2013-09-18 2 views
0

У меня есть небольшое приложение, которое отображается в системном трее.Процесс, приложение закрытия нити

Из этого приложения я запустил команду, я запустил другую программу java, и я получу ее inputStream и покажу ее в textArea.

final Process process = Runtime.getRuntime().exec(runCommand); 

input = new LoggingThread(process.getInputStream()); 
error = new LoggingThread(process.getErrorStream()); 

input.start(); 
error.start(); 

In loggingThread 
public void run() 
{ 

    while (running) 
    { 
     try 
     { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
      String line = ""; 
      try 
      { 
       while ((line = reader.readLine()) != null && running) 
       { 
        JTextAreaAppender.getTextArea().append(line); 
        JTextAreaAppender.getTextArea().append(System.getProperty("line.separator")); 
       } 

      } 
      finally 
      { 
       reader.close(); 
      } 
     } 
     catch (IOException ioe) 
     { 
      ioe.printStackTrace(); 
     } 
    } 
} 

, когда я бросить курить приложения я сделать

input.setRunning(false); 
error.setRunning(false); 

я сделать также Dispose на классе TrayIcon

в диспетчере задач, я по-прежнему видеть две нити для приложения, и один для процесса

если я удаляю процесс, резьба ... приложение правильно закрывается

если я поставил

proc.destroy(); 

после setRunning, закрытие приложения не работают вообще, TrayIcon продолжают показывать

любая идея?

ответ

0

, когда я бросить курить приложения я сделать

input.setRunning (ложь);

error.setRunning (false);

я сделать также Dispose на TrayIcon класса

в диспетчере задач, я по-прежнему видеть две нити для приложения, и один для процесса

Нет необходимости делать это. Если вы хотите закрыть свои приложения, даже если некоторые потоки все еще выполняются, вы можете пометить их как демоны. Просто разместите эти строки после объявлений потоков.

input.setDaemon(true); 
error.setDaemon(true); 

Thread#setDaemon(boolean)

Метки эта нить или как демон нить или нити пользователя. Виртуальная машина Java выходит, когда единственными потоками, запущенными, являются все потоки демона. Этот метод должен быть вызван до начала потока.

Смежные вопросы