当我不经常sysout时,线程停止

时间:2015-03-23 08:16:29

标签: java multithreading sockets networking

我目前正在客户端使用Java编写客户端 - 服务器应用程序。启动客户端时,我启动一个在后台运行的线程,并在GUI请求时发送/接收数据。 GUI不会更改网络线程对象中的任何内容,但会在网络线程循环监视的“监视器”对象中设置状态。

现在的问题是:当我在客户端循环中经常运行System.out.println()时,线程会继续运行并按原样发送/接收数据。但是当我在该循环中没有Sysout时,客户端循环停止,因此当我尝试向服务器发送内容时没有任何反应。

这是run() - 方法:

@Override
public void run() {
    try {
        srv_loop: while(true) {
            System.out.println("Looping"); // When removing this line, it all breaks down and nothing happens when I attempt to send to the server.
            if(!monitor.message.equals("")) {
                if(monitor.message.equals("CLOSE")) {
                    break srv_loop;
                }
                outStream.writeInt(monitor.message.length());
                System.out.println("Wrote length: " + monitor.message.length());
                outStream.writeBytes(monitor.message + '\n');
                System.out.println("Wrote message: " + monitor.message);
                String answer = inStream.readLine();
                System.out.println("Got answer: " + answer);

                if(answer.equals("ACK")) {
                    monitor.message = "";
                } else if(answer.equals("FAIL")) {
                    monitor.message = "FAIL";
                }
            }
        }
    } catch(IOException e) {
        e.printStackTrace();
    }

    System.out.println("out");
}

现在我当然可以将sysout留在那里并且它可以正常工作,但是当我使用我的程序时,我不想让我的终端一直运行。这对我来说似乎很奇怪,我真的不知道为什么会这样。 sysout唯一能做的就是打印并稍微延迟,但Thread.sleep(100)也不起作用。

我知道我应该采用更多事件驱动的方法,这实际上不是用Java编写客户端的好方法,但我只使用Java进行原型设计 - Swing GUI可以在任何地方工作,这就是我需要的所有权利现在

提前致谢。

0 个答案:

没有答案