【问题标题】:JButton with actionlistener does not execute its code带有 actionlistener 的 JButton 不执行其代码
【发布时间】:2012-09-10 00:38:55
【问题描述】:

我在空闲时间开发一个小游戏,但我遇到了一个我不明白为什么会发生的问题。

public class PauseMenu extends JFrame {
       ...
/**
 * Create the frame.
 */
public PauseMenu() {
           ...
    JButton btnContinue = new JButton("Continue");

    btnContinue.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            GamePanel.var.setPause(false);
            dispose();
        }
    });
    contentPane.add(btnContinue);

    ...
}

这是实际上不起作用的代码。它是一个带有三个按钮的 JFrame(我剪掉了另外两个)。它应该是一个暂停菜单,按下“p”键时的“弹出”菜单。 效果很好,问题是

GamePanel.var.setPause(false);

这行应该设置一个布尔值 false,然后继续我的游戏循环。但由于某些原因,它永远不会执行,布尔值保持为真。 此问题仅在我将主游戏窗口从 JPanel 更改为 JFrame 后发生,因此我可以显示其他 jframe。我链接它们是因为它们很长:

这是 JPanel 的旧代码。该按钮使用此代码。

https://github.com/westerwave/dogfight_remake/blob/master/main/Dogfight.java

这是当前代码(JPanel)

https://github.com/westerwave/dogfight_remake/blob/master/main/GamePanel.java

(JFrame)

    public static GameFrame frame;
    public GamePanel game;

    public GameFrame() {
       setUndecorated(true);
       setResizable(false);
       setTitle("Dogfight-Frame");
       setSize(dim);
       setVisible(true);
       game = new GamePanel();
       getContentPane().add(game);
       frame = this;
    }

我希望我对这个问题说清楚了,希望你能帮助我。

编辑: 我犯了一个错误,并依靠我的paintComponent 方法向我提供有关布尔值的信息。我现在发现布尔值已更改,因此一切都按预期工作。但不知何故,我点击那个按钮后我的游戏循环没有恢复

【问题讨论】:

  • 为什么不使用JOptionPane
  • 您不能创建一个更简单的示例来重现您的代码中有效的部分和无效的代码吗?阅读和理解所有代码都很困难。
  • 问题仅在于 jbutton 和布尔值的变化,我添加了其余的上下文。
  • 我发现了我的问题的解决方案,我只需将输入从 InputMap 和 ActionMap 更改为 KeyListener 并解决了它(不知何故)。感谢您的回答,他们帮助我找到了真正的问题!
  • 确保您已将 Vars 中的 pause 变量声明为 volitile。我还会在主游戏循环中的条件之前放置一些输出,以转储 Vars.getPause() 的值作为检查

标签: java jframe jpanel jbutton actionlistener


【解决方案1】:

这应该可以正常工作,我怀疑这里有些混乱。

如果您在actionPerformed() 方法中放置一个断点(或者只是在其中放置一个System.out.println() 语句)会怎样?是否达到/执行?

祝项目顺利,看起来很有趣!

【讨论】:

  • 这就是问题所在。正如我所写, dispose 被调用并且框架消失但暂停布尔值没有改变
猜你喜欢
  • 2018-10-22
  • 2017-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 2020-11-01
相关资源
最近更新 更多