【问题标题】:ActionPerformed jumps out of methodActionPerformed 跳出方法
【发布时间】:2014-07-11 07:50:06
【问题描述】:

我有一个 ActionListener:

class ChangeLevelClickListener implements ActionListener{
    public ChangeLevelClickListener(){ }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        removeAllOldPanels();
        rebuildLevel(2);
    }
}

当我调试程序时,方法 removeAllOldPanels() 被调用:

private void removeAllOldPanels(){ //<-here the program just jumps back to the actionperformed function and doesnt enter the loop
    for(JPanel panel : panels){
        getContentPane().remove(panel);
    }
}

但是正如代码中标记的那样,程序只是没有进入函数,也没有例外。 这个 ActionListener 是 removeAllOldPanels() 所在类中的一个类。

【问题讨论】:

  • 可能是您的panels 数组为空。添加System.out.println() 语句并查看在控制台上执行的语句。
  • 考虑发布SSCCE 以帮助减少猜测。
  • @icza 但是程序甚至没有进入方法,我保证面板数组充满了内容
  • @CuppleKay 那么在这种情况下,您需要提供更多信息。或者输入System.out.println() 语句并将打印到输出中的内容发布给我们。
  • @icza 我是否必须将任何内容设置为公开,因为 ActionListener 类在另一个类中或者是私有的可以吗?

标签: java swing user-interface actionlistener


【解决方案1】:

是否有可能,因为它不是静态 void,您可能需要类的实例来调用它?我当然不是很擅长java,如果我错了,很抱歉。

所以改为要么

private static void removeAllOldPanels(){ //<-here the program just jumps back to the actionperformed function and doesnt enter the loop
for(JPanel panel : panels){
    getContentPane().remove(panel);
}

}

ChangeLevelClickListener myLevelClickListener = new ChangeLevelClickListener();

然后

myLevelClickListener.removeAllOldPanels();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多