Java输入if语句为false

Sup*_*tar 8 java if-statement netbeans-7

我遇到了这个程序中最奇怪的错误,在调试它时会得到确认.我有以下代码(当然要归结为突出问题):

BHFrame.java

public 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.java

public class GUI extends BHFrame
{
  public GUI(boolean useInternalStateSaver)
  {
    super(useInternalStateSaver);
  }
}
Run Code Online (Sandbox Code Playgroud)

Main.java

public 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)被跳过,但第二个被输入.在调试时,我发现这uSSfalse在整个运行时,包括在第二个if语句的行上,这里.为什么Java会if在条件返回时输入语句false在你提问之前,我确实删除了.class文件并重新编译它以防万一有一些残留代码弄乱它,但我得到了相同的结果.请放心,uSS此处显示对变量的所有引用.


事实证明,这似乎是NetBeans 7.1 Build 201109252201中的一个错误,其中IDE没有正确地将新代码插入到编译的.class文件中.通过外部编译文件解决了这个问题.一个错误报告已提交.

Bil*_*ill 0

当机器上的内存很差时,我见过这样疯狂的事情。您可能想运行 memtest86。

您还可以考虑删除所有项目类文件,然后进行构建。也许您更改了 Main.java,但它从未重新编译。我讨厌这种情况发生。