gpt4 book ai didi

使用异常的 Java 类

转载 作者:行者123 更新时间:2023-12-01 18:56:00 25 4
gpt4 key购买 nike

我有下一个代码,基于使用 Java UDPSocket() 的示例(不是内置类):

package BomberButti;
import java.io.*;
import java.net.*;

/**
* BomberServer
* Hier wordt de Server opgezet waarop Clients kunnen connecteren om vervolgens tegen elkaar te spelen
* @author Kaj
*/
public class BomberServer {

public BomberServer() {
waitForPlayers();
}

public static void waitForPlayers() throws Exception {
try {
DatagramSocket serverSocket = new DatagramSocket(9876); //Socket openen

byte[] receiveData = new byte[1024]; //Ontvangen gegevens
byte[] sendData = new byte[1024]; //Te verzenden gegevens

while(true) {
receiveData = new byte[1024];

//Ontvangen data (als die er is) ophalen
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

System.out.println ("Waiting for datagram packet");

serverSocket.receive(receivePacket);

String sentence = new String(receivePacket.getData());

InetAddress IPAddress = receivePacket.getAddress();

int port = receivePacket.getPort();

System.out.println ("From: " + IPAddress + ":" + port);
System.out.println ("Message: " + sentence);

String capitalizedSentence = sentence.toUpperCase();

sendData = capitalizedSentence.getBytes();
sendData = new String("Request accepted").getBytes();
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress,
port);

serverSocket.send(sendPacket);

}
}
catch(SocketException ex) {
System.out.println("UDP Port 9876 is occupied.");
System.exit(1);
}
}
public static void main(String args[]) {
BomberServer server = new BomberServer();
}
}

当尝试运行此代码时,我收到错误“未报告的异常异常;”必须被捕获或被声明为被抛出'。

我知道这与我放在 waitForPlayers() 方法声明后面的“抛出异常”有关。但是当我删除这个抛出异常部分时,我在该行收到错误:serverSocket.receive(receivePacket); '取消报告器异常 IOException;必须声明为抛出'所以我想我尝试的两种方法都不是正确的方法。

那么我该怎么做才能保证它是正确的呢?

此致,

卢克索

最佳答案

waitForPlayers() 内部的代码可以抛出 IOException,因此该方法应该声明它抛出 IOException(而不是 Exception,因为 Exception 太模糊了):

public static void waitForPlayers() throws IOException {

由于此方法可以抛出 IOException,并且您从构造函数调用此方法而不捕获 IOException,因此构造函数还必须声明它抛出 IOException:

public BomberServer() throws IOException {

当然,调用此构造函数的方法还必须捕获 IOException,或者声明它抛出 IOException 等,直到您达到可以处理此 IOException 的程度,从而将其捕获到处理一下。

阅读tutorial about exceptions .

重要提示:捕获异常,打印其堆栈跟踪,然后像什么都没发生一样继续通常不是异常应该如何处理的方式。

关于使用异常的 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13921548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com