Java 按下JRadiobutton可冻结GUI

Java 按下JRadiobutton可冻结GUI,java,swing,jtextarea,jradiobutton,Java,Swing,Jtextarea,Jradiobutton,我对Swing还不熟悉,所以这似乎是一个非常幼稚的问题 我有一个JFrame,它显示一个初始语句和两个单选按钮。RadioButton1为接受,RadioButton2为拒绝。如果用户选择接受,程序将继续。因此,我为Accept创建了一个ActionListener,以便我的其余代码都在这个ActionListener中。但是,只要用户按下Accept,GUI就会冻结。按“拒绝”按钮仅存在于程序之外 public void game() throws Exception {

我对Swing还不熟悉,所以这似乎是一个非常幼稚的问题

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

    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时,是否有更好的方法继续?

仅在事件处理中放置所需的最少GUI更新,对于其余的非GUI,请使用
线程
s.

顺便说一下,在使用SwingWorker类查看
setVisible
之后,不需要
重新绘制

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

编辑:您还可以查看SwingUtilities类

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

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


此处有更多详细信息:

您的问题在
//更多代码
部分。您正在Swing事件线程上调用一个长时间运行的进程,该进程将绑定该线程,从而阻止它绘制GUI或与用户交互,从而有效地冻结您的应用程序。解决方案是使用SwingWorker进行后台线程。有关这方面的更多信息,请阅读。不需要调用
repait
call BTW。调用
setVisible(false)
将自动触发重新绘制这就是我提到SwingUtilities时的意思。然后我会将其添加回答案。setVisible之后的注释
无需重新绘制对于简单组件是正确的,但是如果添加或删除组件,或者如果需要动画,则注释不正确。