Sup*_*tar 8 java if-statement netbeans-7
我遇到了这个程序中最奇怪的错误,在调试它时会得到确认.我有以下代码(当然要归结为突出问题):
BHFrame.javapublic class BHFrame
{
private boolean uSS;
private StateSaver stateSaver;
public BHFrame(boolean useInternalStateSaver)
{
//Init code
uSS = useInternalStateSaver;
//More init code
System.out.println(uSS);
if (uSS)
{System.out.println("Entered 1");
stateSaver = new StateSaver(title, false);
stateSaver.addSaveable(getThis());
}
//More init code
System.out.println(uSS);
if (uSS)
{System.out.println("Entered 2");
try
{
stateSaver.loadState();
stateSaver.putState(getThis());
}
catch (IOException ex)
{
alertUserOfException(ex);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
GUI.javapublic class GUI extends BHFrame
{
public GUI(boolean useInternalStateSaver)
{
super(useInternalStateSaver);
}
}
Run Code Online (Sandbox Code Playgroud)
Main.javapublic class Main
{
public static void main(String[] args)
{
GUI gui = new GUI(false);
}
}
Run Code Online (Sandbox Code Playgroud)
false
false
Entered 2
Exception in thread "main" java.lang.NullPointerException
at bht.tools.comps.BHFrame.<init>(BHFrame.java:26)
at bhms.GUI.<init>(GUI.java:5)
at bhms.Main.main(Main.java:5)
Run Code Online (Sandbox Code Playgroud)
该类BHFrame是从调用此构造函数的子类进行扩展和运行的,但实际上不应该影响此行为.问题是,当false传递给构造函数时useInternalStateSaver,第一个if (uSS)被跳过,但第二个被输入.在调试时,我发现这uSS是false在整个运行时,包括在第二个if语句的行上,这里.为什么Java会if在条件返回时输入语句false?在你提问之前,我确实删除了.class文件并重新编译它以防万一有一些残留代码弄乱它,但我得到了相同的结果.请放心,uSS此处显示对变量的所有引用.
事实证明,这似乎是NetBeans 7.1 Build 201109252201中的一个错误,其中IDE没有正确地将新代码插入到编译的.class文件中.通过外部编译文件解决了这个问题.一个错误报告已提交.
当机器上的内存很差时,我见过这样疯狂的事情。您可能想运行 memtest86。
您还可以考虑删除所有项目类文件,然后进行构建。也许您更改了 Main.java,但它从未重新编译。我讨厌这种情况发生。