Java BufferedReader死锁:如何正确关闭BufferedReader
从InputStreamReader(从InputStream读取)读取的BufferedReader出现死锁问题 有一个Swing GUI正在被用户关闭。JFrame被释放并调用finish方法Java BufferedReader死锁:如何正确关闭BufferedReader,java,bufferedreader,processbuilder,Java,Bufferedreader,Processbuilder,从InputStreamReader(从InputStream读取)读取的BufferedReader出现死锁问题 有一个Swing GUI正在被用户关闭。JFrame被释放并调用finish方法 DppGUI gui = this; addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent windowEvent) {
DppGUI gui = this;
addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent windowEvent)
{
int choice = Dialogs.displayExitQuestionDialog(gui);
if (choice == JOptionPane.YES_OPTION)
{
_dataReciever.finish();
dispose();
}
}
});
需要运行finish方法来中断while循环,以最终让线程完成。这里是finish方法
public void finish()
{
_isRunning = false; // This boolean shall break a while loop.
_listener = null;
try
{
_processInputStream.close();
System.out.println("Closed input stream");
_inputStreamReader.close();
System.out.println("Closed input stream reader");
_reader.close();
System.out.println("Closed reader");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
问题是我不知道如何从“外部”关闭BufferedReader,以便
while ((line = _reader.readLine()) != null)
被跳过
以下是死锁线程(需要在用户关闭gui后立即完成)
要关闭BufferedReader,我尝试将其设置为null。我尝试关闭BufferedReader、InputStreamReader和InputStream(正如您在finish方法中看到的),但是没有任何效果,程序仍然死锁。有人遇到过同样的问题吗?有人看到解决方案了吗
提前谢谢
编辑:
我忘了提到死锁之前的最后一个控制台输出是
封闭输入流
它来自finish方法。这意味着InputStreamReader和BufferedReader未关闭。更换
while (_isRunning)
{
while ((line = _reader.readLine()) != null) // The program deadlocks in this line when the GUI is closed
{
与
close
调用reader.readLine
收到null
中断正在进行读取的线程。1。我就是这么想的。谢谢你的信息。2.成功了!我将进程(从中获取InputStream)放入一个字段中,并使用process.destroy()方法。它立即离开while循环,让线程结束。
while (_isRunning)
{
while ((line = _reader.readLine()) != null) // The program deadlocks in this line when the GUI is closed
{
while (_isRunning && (line = _reader.readLine()) != null)
{