我正在呼叫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()
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
我该如何解决这个问题?
答案 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 :)