繁体   English   中英

按JRadiobutton冻结GUI

[英]Pressing JRadiobutton freezes GUI

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

我有一个JFrame,它显示一个初始语句和两个radiobuttons。 RadioButton1是Accept,RadioButton2是Reject。 如果用户选择“接受”,则程序继续。 所以我为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时,有更好的方法可以继续吗?

您可以查看使用SwingWorker类。

基本上,Java Swing应用程序是单线程的,如果您执行任何进程密集型任务,控件将转移到该部分代码并且UI挂起,等待控制权交还。

编辑:您还可以查看SwingUtilities类。

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

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

更多细节: http//docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

只在事件处理中放置所需的最小GUI更新,对于其余的非GUI ,使用Thread s。
顺便说一下, setVisible之后不需要repaint

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM