Java 在特定时间后在SwingWorker中终止BufferedReader while循环

Java 在特定时间后在SwingWorker中终止BufferedReader while循环,java,swing,while-loop,bufferedreader,swingworker,Java,Swing,While Loop,Bufferedreader,Swingworker,我有一个SwingWorker,它应该依次执行3个方法。方法1包含用于BufferedReader的while循环。当BufferedReader从未发出结束信号时,该while循环从未终止。我想在5秒后使用某种计时器终止循环。我该怎么做 public class TestWorker extends SwingWorker<Void,Void>{ public TestWorker(){ } private void doS

我有一个
SwingWorker
,它应该依次执行3个方法。方法1包含用于
BufferedReader
的while循环。当
BufferedReader
从未发出结束信号时,该while循环从未终止。我想在5秒后使用某种计时器终止循环。我该怎么做

    public class TestWorker extends SwingWorker<Void,Void>{
        public TestWorker(){
        }

        private void doSomething1(){
            TelnetClient telnetClient
            telnetClient = new TelnetClient();
            telnetClient.connect(telnet_IPAddress, telnet_Port);

            InputStream telnetInputStream = telnetClient.getInputStream();

            try (BufferedReader br = new BufferedReader(new InputStreamReader(telnetInputStream))) {
                String line;
                while ((line = br.readLine()) != null) {
                    //Do something
                    //The bufferedreader is not signaled with an end of a stream. I want to terminate this loop after 5 seconds.
                }
            } catch (IOException ex) {
            }
        }

        private void doSomething2(){
        }

        private void doSomething3(){
        }

        @Override
        public Void doInBackground() {
            doSomething1();
            doSomething2();
            doSomething3();
            return null;
        }

        @Override
        public void done() {
            //Update something on a GUI
        }
    }
公共类TestWorker扩展SwingWorker{
公共测试工作者(){
}
私有void doSomething1(){
TelnetClient TelnetClient
telnetClient=新的telnetClient();
telnetClient.connect(telnet\u ip地址、telnet\u端口);
InputStream telnetInputStream=telnetClient.getInputStream();
try(BufferedReader br=new BufferedReader(new InputStreamReader(telnetInputStream))){
弦线;
而((line=br.readLine())!=null){
//做点什么
//bufferedreader未收到流结束的信号。我想在5秒后终止此循环。
}
}捕获(IOEX异常){
}
}
私有void doSomething2(){
}
私有无效doSomething3(){
}
@凌驾
公共无效doInBackground(){
doSomething1();
doSomething2();
doSomething3();
返回null;
}
@凌驾
公众假期结束(){
//在GUI上更新一些东西
}
}

是否有一致的输入流,或者,一旦输入流完成,它是否只是等待一个
readLine
调用?这意味着如果你把一个
println
放在while循环中,事情会一直被打印出来,还是最终会停止打印?1)将表单
catch(异常e){..
的代码更改为
catch(异常e){e.printStackTrace();//非常有用!。
2)为了更快地获得更好的帮助,请发布SwingWorker的.is实例,如果不是与Swing相关,则使用普通Executor,否则发布一个简短、可运行、可编译的@Dukeling。我从telnet会话获取输入流(我使用apache commons net)。据我所知,它只是等待,从不终止,但不会一直打印。一个选项是(假设“在没有读取任何内容后在X秒后停止”,而不是“读取Y秒,然后停止”)可以。