java - 虽然 Java 中的 try/catch 打破了 true 循环

标签 java while-loop try-catch

我是网络初学者,正在努力在我的游戏中实现它,它大部分工作正常,但在客户端中,我的循环接收数据包正在停止 try catch 。这是代码:

public void run() {
    while(true){
        byte[] data = new byte[1024];
        DatagramPacket packet = new DatagramPacket(data, data.length);
        try {
            socket.receive(packet);
        }catch(IOException e){
            e.printStackTrace();
        }

        this.parsePacket(packet.getData(), packet.getAddress(), packet.getPort());
    }
}

调试后我发现循环没有通过 try catch 语句。(但 try 被激活一次,看起来没有错误)。

最佳答案

首先,您提供的循环条件不是变量,您直接使用了 boolean 值true。这可能是无限循环的情况。

 while(true){..... // yourCode ....}

即使 socket.receive(packet); 行引发 IOException,循环也会继续,因为此异常由 catch() 处理> 阻止。

这意味着它将执行直到该行引发任何异常

this.parsePacket(packet.getData(), packet.getAddress(), packet.getPort());

现在,您的问题是这个方法 public void receive(DatagramPacket p) 实际上,该方法将一直工作,直到收到 datagram ,但您的循环将继续,直到引发异常,直到 this.parsePacket() 方法引发异常。

So, please change your conditional statement such that if datagram is no more present then loop must be terminated.

关于java - 虽然 Java 中的 try/catch 打破了 true 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36684322/

相关文章:

Java数据库大数据量查询/更新

java - 静态分析自定义规则以强制执行未经检查的异常处理

c++ - C++中finally的实现

java - 通过调用另一个类的方法来更新信息

c - 使用-不使用 while 循环在 C 中随机播放一个 int 数组

perl - WWW::Mechanize::Timed https 超时不起作用

java - 根据条件随机化颜色

java - 包 org.codehaus.jettison.json 不存在

java - 接收通过网络发送的 PDU,并在显示给用户之前按接收到的方式过滤它们

java - 为什么在Java中改变for循环计数器是不好的?