未报告的异常 UnknownHostException;必须在全局声明期间被捕获或声明为抛出

unreported exception UnknownHostException; must be caught or declared to be thrown during global declaration

我试图在 class 中声明一个全局变量,每当我创建像 int i; 这样的简单变量时,它们很容易创建,但是当我尝试创建一个像 [=12] 这样的对象时=] 它给出了我提到的错误。我知道它要我处理异常,但是程序的这一部分没有语法在工作,trycatch 表示非法启动类型。

这可能会通过应用正确的语法来解决。请帮忙。谢谢。

这是我的代码..

public class NumberAdditionUI extends javax.swing.JFrame {


    Socket socket = new Socket("192.168.1.3",4917); 

    public static void main(String args[]) {
        /* Set the Nimbus look and feel */

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NumberAdditionUI().setVisible(true);
            }
        });

    }

创建您正在使用的套接字的构造函数抛出异常 UnknownHostException 和 'IOException'。这些必须始终在 try catch 中,或者必须至少在控制流中的某个位置被捕获。

但是在你的情况下,你是在全局上下文中声明它,你不能像这种情况那样处理这种异常。

构造函数看起来像这样

public Socket(String host,
      int port)
       throws UnknownHostException,
              IOException

查看 official docs

你遇到的问题是 Socket 的构造函数会抛出异常,你需要以某种方式处理它。

有几种简单的方法可以做到这一点。

一种是创建无参数构造函数,并在那里初始化 socket。然后你可以在那里处理异常,或者声明你抛出它们并让实例化代码处理它:

Socket socket;
public NumberAdditionUI() {
    try {
        socket = new Socket("192.168.1.3", 4917);
    } catch (UnknownHostException e) {
        // ...
    } catch (IOException e) {
        // ...
    }
}
// OR
public NumberAdditionUI() throws UnknownHostException, IOException {
    socket = new Socket("192.168.1.3", 4917);
}

另一种方法是使用 initialization block:

Socket socket;
{
    try {
        socket = new Socket("192.168.1.3", 4917);
    } catch (UnknownHostException e) {
        // ...
    } catch (IOException e) {
        // ...
    }
}