【问题标题】:How can I make my Java program pause until a specific button has been pressed?如何让我的 Java 程序暂停,直到按下特定按钮?
【发布时间】:2012-04-16 13:33:17
【问题描述】:

我目前正在编写一个类似于打砖块的游戏,需要知道如何让我的程序等待特定函数被调用。

我需要暂停程序,直到在按钮之间做出决定。例如,游戏启动,用户可以选择他在游戏中想要的颜色。因此,游戏暂停,直到他做出选择并且他很高兴,然后程序需要恢复到不同的阶段。

【问题讨论】:

  • 你在使用 Swing 组件吗?
  • 我需要暂停程序,直到在按钮之间做出决定。例如,游戏启动,用户可以选择他在游戏中想要的颜色。因此,游戏会暂停,直到他做出选择并且他感到满意,然后程序需要恢复到不同的阶段。

标签: java swing events jbutton wait


【解决方案1】:

如果您使用的是 Swing 组件,您可以向按钮添加一个ActionListener,并在覆盖的actionPerformed 方法中包含需要执行的逻辑。

另见How to Write an Action Listener

编辑

我需要暂停程序,直到做出决定 纽扣。例如,游戏启动,给用户一个 选择他在游戏中想要的颜色。于是,游戏暂停 直到他做出选择并且他很高兴然后程序 需要恢复到不同的阶段。

有几种方法可以解决这个问题,但我不打算在这里深入探讨并发编程的复杂性。你可以找到其他资源。话虽如此,我想说的一条评论是,您既不应该执行长时间运行的任务,也不应该在 Event Dispatch Thread (EDT) 中休眠,因为这样做会导致 UI 变得无响应(即“冻结”)。

【讨论】:

    【解决方案2】:

    我需要暂停程序..

    对于像砖块破坏者这样的游戏,您通常会有一个动画循环。按下按钮时,按照 user132 的建议行事。至于 什么 在发生这种情况时要做什么,这取决于首先如何组织代码循环。

    例如Swing Timer,这是一种在 GUI 中循环和暂停渲染的简单方法——它提供了像 start()stop() 这样的方法。如果您有多个计时器正在运行(例如,一个用于渲染循环,另一个用于关卡的“倒计时计时器”),您显然需要将它们全部暂停。

    更多详细信息可能会在您当前代码的SSCCE 中提供。

    【讨论】:

      【解决方案3】:

      您在 GUI 编程领域,基本上使用事件事件驱动

      在某种程度上你问错了问题。

      事件驱动系统中,您总是在等待。当某些事件发生时,您继续工作。

      在您的情况下,您应该考虑按下按钮时要做什么。

      【讨论】:

        【解决方案4】:

        这是您需要的结构类型的基本大纲。

            import java.swing.*
            public class Breaker
            {
                private 
                Listener listener;
                JButton b1;
        
                public Breaker()
                {
                  listener = new Listener();
                  b1 = new JButton("b1");
                  b1.addActionListener(listener);
        
                }
        
                class Listener implements ActionListener
                {
                    public void actionPerformed(ActionEvent e)
                    Component theEventer = (Component) e.getSource();
        
                    if (theEventer == b1)
                    {
                        You're stuff here
                    }
        
                }
                public static void main (String[] args)
                {
                    new Breaker();
                }
            }
        

        【讨论】:

          猜你喜欢
          • 2015-02-25
          • 2019-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-10
          相关资源
          最近更新 更多