Java 进程,线程关闭应用程序

Java 进程,线程关闭应用程序,java,multithreading,process,Java,Multithreading,Process,我有一个显示在系统托盘中的小应用程序 从这个应用程序中,我启动一个命令,运行另一个java程序,获取inputStream并将其显示在文本区域中 final Process process = Runtime.getRuntime().exec( runCommand ); input = new LoggingThread( process.getInputStream() ); error = new LoggingThread( process.getErrorStream() );

我有一个显示在系统托盘中的小应用程序

从这个应用程序中,我启动一个命令,运行另一个java程序,获取inputStream并将其显示在文本区域中

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);
我还处理了TrayIcon类

在任务管理器中,我继续看到应用程序有两个线程,进程有一个线程

如果我删除进程,线程。。。应用程序正在正确关闭

如果我把

proc.destroy();
设置运行后,关闭应用程序根本不工作,TrayIcon继续显示

有什么想法吗

当我退出应用程序时,我会这样做

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

错误。setRunning(错误)

我还处理了TrayIcon类

在任务管理器中,我继续看到应用程序有两个线程,进程有一个线程

没必要那样做。如果您想在某些线程仍在执行的情况下关闭应用程序,可以将它们标记为守护进程。只需将这些行放在线程声明之后

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

将此线程标记为守护进程线程或用户线程。当运行的线程都是守护进程线程时,Java虚拟机将退出。 必须在线程启动之前调用此方法