无法从另一个 class 访问方法

Cant access methods from another class

我正在打电话 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

我该如何解决这个问题?

您正试图在您的 DataComparison class 中调用 getLSB(),但您没有给它提供您的 SteganographyGUI class 的引用。所以更改以下行:

 DataComparison dataComp;
 dataComp = new DataComparison();

至:

DataComparison dataComp;
dataComp = new DataComparison(this);

并更改构造函数:

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

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

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 :)

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

gui = new SteganographyGUI();

你执行 SteganographyGUI class 构造函数(可能)调用 DataComparison class 构造函数

public DataComparison(){

    lsb = gui.getLSB(); 

}

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

的原因

是的,我知道 "the exception message is misleading" :)