当前位置: 首页 > 知识库问答 >
问题:

按下JRadiobutton可冻结GUI

古明煦
2023-03-14

我是Swing的新手,所以这似乎是一个非常天真的问题。

我有一个JFrame,它显示一个初始语句和两个单选按钮。RadioButton1表示接受,RadioButton2表示拒绝。如果用户选择接受,程序将继续。因此,我为Accept创建了一个ActionListener,以便我的其余代码都在这个ActionListener中。然而,只要用户按下Accept,GUI就会冻结。按Reject键只是程序外的一个选项。

    public void game() throws Exception
    {
        jTextArea1.setLineWrap(true);
        jTextArea1.setWrapStyleWord(true);
        jTextArea1.setText("Please choose Accept or Reject");


        jRadioButton1.setVisible(true);
        jRadioButton2.setVisible(true);

            jRadioButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {

              jRadioButton1.setVisible(false);
              jRadioButton2.setVisible(false);
              repaint();
             //more code
           });
    }

在这之后,我连接到服务器,这很好,因为当我使用System.out.println()时,所有的输出都很好,只是GUI被冻结了。

当用户按下Accept时,是否有更好的方式继续?

共有2个答案

申高峯
2023-03-14

只在事件处理中放入所需的最少GUI更新,对于其余的非GUI,使用线程s.
顺便说一句,在设置可见之后不需要重新绘制

余阳秋
2023-03-14

你可以看看SwingWorker类的用法。

基本上,JavaSwing应用程序是单线程的,如果您执行任何进程密集型任务,控件将转移到该代码段,UI挂起,等待控件返回。

编辑:您也可以查看SwingU实用程序类。

编辑:使用SwingWorker类的基本信息:

您可以创建一个扩展SwingWorker的新类,并实现公共字符串doInBackground(){/*Do Stuff here*/}方法。在ActionListener事件中,创建SwingWorker的实例并调用swingWorkerObject。execute()方法来启动doInBackground方法的执行。

更多详情请点击此处:http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

 类似资料:
  • 问题内容: 这是一个片段 我正在使用和作为文本框。文本框应显示“ Hello”,然后等待一秒钟,但是,当我尝试执行此操作时,它会等待一秒钟,然后放置“ Hello”一词,这不是我想要的。 我不确定为什么会这样,因为我将其按逻辑顺序放置。如果有人可以帮助我,那就太好了。 编辑: 有谁知道替代方案,所以我可以使用“延迟”效果吗? 问题答案: 永远不要从Swing事件线程中调用Thread.sleep(

  • 我一直试图使这个应用程序,将产生一个折线图后,我点击"添加新数据项"按钮。现在,在我点击按钮后,什么都没发生(gui冻结),在我最大化框架后,图形出现在框架内,这意味着我的程序工作了,但我不知道为什么我的gui冻结了。我见过类似的问题,人们回答说必须引入一个新的线程来处理不同的拍摄,我也尝试过,但它仍然不起作用,只是让情况变得更糟。有人知道我犯了什么错误吗?这是我的代码: 谢谢你!

  • 我正在使用tkinter编写一个应用程序,当按下按钮时,该应用程序将连接到sql DB并运行sql查询。我遇到了这样一个问题:当sql querys方法运行时,GUI会说“没有响应”,当它完成时,它会恢复正常。我决定将sql查询放在它自己的线程中,将tkinter的主循环放在它自己的线程中,但它根本不工作。。。? 这是我的GUI,我将主循环放在线程0中 还有这里 我将sql查询运行方法放在线程1中

  • 问题内容: 我正在使用CentOS7;尝试下载golang 1.5.1二进制文件和,并遇到了安装revel的相同问题。去工作正常;当我这样做时,它将显示正确的版本。 当我输入时,一些软件包下载就很好了。…直到它被fsnotify为止。然后我得到以下输出: 它只是冻结。不管我尝试什么,它都不会下载任何内容。在文件中,并在就好拉。我已经确保可以使用http://gopkg.in和https://gop

  • 这似乎是件很简单的事情,但我在任何地方都找不到。我想要一个简单的程序(比如自动热键,但我找不到使用自动热键的方法),当我按下某个键时,它会冻结我的键盘和鼠标(无论我当时按什么键,即使我释放了实际的键/按钮),并将其冻结,直到我再次按下该键(选择的键从未被其他程序视为按下)。 我只是希望这样,如果游戏希望我按住一些按钮,我可以按下按钮,按下指定的键,松手,然后在我应该松开按钮的时候再次按下键。

  • 问题内容: 我正在尝试使用Swing和ACM交互程序制作一个非常简单的程序。它直接从课堂讲义中获取,但在我的计算机上不起作用。当我运行它时,它可以正常运行约半秒钟,然后短暂闪烁,重新加载,然后所有按钮和文本字段功能都丢失。这是代码: 如果有帮助,我将在运行Mac OSX 10.8.4的2010年中的Mac Pro上将Java SE 1.6与Eclipse Helios Service Releas