无法访问其他班级

时间:2015-04-24 22:25:36

标签: java methods static

我正在呼叫DataComparison()

public class SteganographyGUI {

    ...

    DataComparison dataComp;
    dataComp = new DataComparison();

}

public int getLSB(){
    String x = fileChooser1.getSelectedFile().getAbsolutePath();
    x = x.substring(x.length() - 10, x.length() - 9);
    return Integer.parseInt(x);
}

满足某些标准时。我的问题是,当我尝试使用gui.getLSB()

访问getLSB时
public class DataComparison {

    public static SteganographyGUI gui;

    ...


    public DataComparison(){

        lsb = gui.getLSB(); 

    }
    public static void main(String[] args) {
        gui = new SteganographyGUI();
        gui.setVisible(true);
    }

出现错误 - Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您正在尝试在DataComparison类中调用getLSB(),但是您没有为它提供SteganographyGUI类的引用。因此,请更改以下行:

 DataComparison dataComp;
 dataComp = new DataComparison();

到:

DataComparison dataComp;
dataComp = new DataComparison(this);

并改变构造函数:

public DataComparison(SteganographyGUI guiRef){
    gui = guiRef;
}

答案 1 :(得分:1)

当您尝试启动静态“ gui ”变量

gui = new SteganographyGUI();

执行 SteganographyGUI 类构造函数,该构造函数(可能)调用 DataComparison 类构造函数

public DataComparison(){

    lsb = gui.getLSB(); 

}

使用尚未设置的静态“ gui ”变量。这就是你得到“java.lang.NullPointerException”的原因。

是的,我知道“异常信息具有误导性”:)

答案 2 :(得分:0)

您正在代码中进行循环调用。尝试另一个只为main的类,并按顺序调用它的方法:

class 1: `public class SteganographyGUI {...}`

class 2: `public class DataComparison {...}

class 3:

`public class XXXX {
 public static void main(String[] args) {
        gui = new SteganographyGUI();
        gui.setVisible(true);
    }
}` 

I have helped :)