-2

我是 NetBeans 的新手。我无法在 Eclipse 中运行它。当我尝试运行它时,我收到一个错误,例如non static variable cannot be referenced from static context. 请帮我解决。

图片

InetAddress ip;

try {
    ip = InetAddress.getLocalHost();
    String t1= ip.getHostName();

    sysname.setText(t1);               // HERE IS THE ERROR
    //sysname.setText("hi");           // EVEN THIS ALSO MAKE ERROR
} catch (UnknownHostException ex) {
     Logger.getLogger(mainframe.class.getName()).log(Level.SEVERE, null, ex); 
}
4

3 回答 3

0

从您发布的异常来看,您向我们展示的代码似乎在一个static方法中,也许是main(),而变量sysname是一个实例变量,可能声明为

private JLabel sysname;

static没有实例,即从上下文中,您无法访问实例字段。

于 2013-09-03T18:33:28.463 回答
0

根据您的问题描述,问题在于您sysname从内部引用了一个非静态实例main

要引用sysname,您需要有一个您似乎没有实例化的实例。

简而言之,如果您的代码片段来自main方法,您可以执行以下操作。


public class App {
    private JLabel sysname = new JLabel();

    public static void main() {

            App app = new App();
             app.setIpLabel();

    }

      void setIpLabel() {
     InetAddress ip;

        try {
            ip = InetAddress.getLocalHost();
            String t1 = ip.getHostName();

            sysname.setText(t1); // HERE IS THE ERROR
            // sysname.setText("hi"); // EVEN THIS ALSO MAKE ERROR
        } catch (UnknownHostException ex) {
            Logger.getLogger(mainframe.class.getName()).log(Level.SEVERE, null, ex);
        }
}

}   
于 2013-09-03T18:50:18.730 回答
0

如果它在您的主目录中,如建议的那样,请像这样使用它:

public class test {
JLabel sysname;

private void setAdress() {
    InetAddress ip;

    try {
        ip = InetAddress.getLocalHost();
        String t1 = ip.getHostName();

        sysname.setText(t1); // HERE IS THE ERROR
        // sysname.setText("hi"); // EVEN THIS ALSO MAKE ERROR
    } catch (UnknownHostException ex) {
        Logger.getLogger(mainframe.class.getName()).log(Level.SEVERE, null, ex);
    }
}

然后在你的主要:

Test test = new Test();
test.setAdress();
于 2013-09-03T18:39:14.263 回答