在Windows上,我用
ProcessBuilder
这样地:
ProcessBuilder processBuilder = new ProcessBuilder( "async.cmd" );
processBuilder.redirectErrorStream( true );
processBuilder.start();
然后我在一个单独的线程中读取进程的输出,如下所示:
byte[] buffer = new byte[ 8192 ];
while( !interrupted() ) {
int available = m_inputStream.available();
if( available == 0 ) {
Thread.sleep( 100 );
continue;
}
int len = Math.min( buffer.length, available );
len = m_inputStream.read( buffer, 0, len );
if( len == -1 ) {
throw new CX_InternalError();
}
String outString = new String( buffer, 0, len );
m_output.append( outString );
}
现在,文件“async.cmd”的内容是:
REM start a command window
start cmd /k
启动此扩展程序的进程已终止(
process.waitFor()
返回退出值)。然后我发送了一个
readerThread.interrupt()
到读线程,线程也终止了。
但仍有一个线程在运行,但没有终止。这个线程保持我的Java应用程序运行,即使它退出了它。
main
方法。使用调试器(Eclipse),我无法挂起这个线程。退出了打开的命令窗口后,我的Java程序也退出了。
问题
当命令窗口保持打开状态时,我如何退出Java程序?