当前位置: 首页 > 面试题库 >

从JButton调用方法是否冻结了JFrame?

王宜
2023-03-14
问题内容

我正在上一堂基本的Pong游戏。我正在工作Pong,并且在启动时有GUI显示,很遗憾,我似乎无法从JButton开头开始游戏。我已在代码中指出问题所在,并删除了不相关的代码。

 frame.add(GUIPanel);
        JButton startButton = new JButton("Start!");     
        GUIPanel.add(startButton, BorderLayout.CENTER);
        startButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
         { 
             frame.getContentPane().remove(GUIPanel);
             frame.validate();
             frame.repaint();

             drawPanel = new DrawPanel();
             drawPanel.requestFocus();
             frame.getContentPane().add(BorderLayout.CENTER, drawPanel);
              //This is the part that freezes it, everything else works fine
              //except that the playGame method isn't called. If I remove the whole
              //startButton and whatnot I can call playGame and it works perfectly.                                                                                    
              playGame();          
           }
         }); 
         }

有任何想法吗?


问题答案:

Swing是一个单线程框架。

也就是说,对UI的所有交互和修改都应在事件调度线程的上下文内进行。阻塞此线程的所有内容都将阻止其处理,尤其是重画请求和用户输入/交互。

我的猜测是playGame正在使用类似Thread.sleep或类似的东西while(true)并且阻止了EDT,导致您的程序看起来像被冻结了一样

阅读Swing中的并发以了解更多详细信息。

一个简单的解决方案是使用SwingTimer充当游戏循环。每次打勾时,您都将更新游戏状态并调用(类似)repaint游戏组件



 类似资料:
  • 我正在为一个班做一个基本的乒乓球游戏。我让Pong工作,启动时有一个GUI显示,不幸的是,我似乎无法从开始按钮启动游戏。我已经在代码上注释了问题所在,并删除了不相关的代码。 有什么想法吗?

  • 所以我肯定有类似的东西在那里,但我已经搜索了一个小时,还没有找到确切的我要找的东西。假设我有一个这样的类: 我该如何制作这样的作品?

  • 问题内容: 因此,我敢肯定那里有类似的东西,但是我一直在寻找一个小时,却没有找到我真正想要的东西。说我有一堂课,看起来像这样: 我该如何做这样的工作? 问题答案: 使用Mockito,您可以像这样 监视真实对象 : 有一些陷阱,因此也请查看相关文档。

  • 我有一个角度服务公开了一个公共方法。在它的主体中,可以根据条件调用两个不同的私有方法 如何根据传递给公共方法的输入参数,与jasmine一起检查是否调用了一个或另一个方法?我知道我们不应该测试私有方法,但实际上在这里我只想验证公共方法是否调用了正确的私有方法。我不想公开私有方法,因为我只希望服务提供一个访问点。 我的服务方式: } 茉莉花试验: });

  • 我有一个简单的聊天客户端,我正试图使用作为界面。我的问题是,使用进行聊天输入/输出后,窗口将冻结并阻塞,直到收到另一条消息。 这段代码被缩短了,但是显示了相关的部分。小部件将在很长一段时间内变得无响应,而被调用之后,直到收到消息才会响应。 当小部件再次响应时,条目字段包含输入的所有数据,但在“冻结”时间内我看不到更改。小部件也是如此。 如果有人能解释一下为什么会这样,或者指出我是否错过了这里使用的

  • 我正在开发一个用于指纹读取器的Android应用程序,我的操作包括验证用户指纹(连续),以及注册新指纹(从Web API获取指纹)。我正在使用Morpho MSO 1300指纹读取器。 当我运行我的应用程序时,我不断收到以下logcat消息 01-02 11:19:48.910 5286-11417/com.cms.attendance D/dalvikvm: GC_FOR_ALLOC释放 293