【问题标题】:JFrame will not repaint until after try/catch completes在 try/catch 完成之前,JFrame 不会重新绘制
【发布时间】:2014-08-04 08:15:38
【问题描述】:

我有一个程序通过我在 main 中调用的函数来获取用户的输入。提交按钮附加了一个执行操作的方法。在删除输入文件并设置文本以通知用户后,我试图让它重新绘制屏幕。在使用自定义函数进行 try/catch 之后,它才会重新绘制。不知道我做错了什么,尽管它会按顺序执行?以下是附加到我的提交按钮的我的操作。一个注意事项是,如果我执行 frame.dispose() 或 setVisibility(false) 它将删除框架,任何帮助将不胜感激。谢谢!!

    button.addActionListener(new ActionListener (){

                public void actionPerformed(ActionEvent e) {
                    loc = FileLoc.getText();
                    name =  FileName.getText();

                    //inform user
                    area.setText("Attempting To Run Test....");
                    //backGroundPane contains the user input fields and button      
                    frame.remove(backGroundPane);
                    frame.repaint();

                    if(loc != null && name != null && 
                            !loc.equals("") && !name.equals(""))
                    {
                        try {
                            CallDrivers();
                        } catch (InterruptedException e1) {
                            System.out.println("Error Running Function");
                            //e1.printStackTrace();
                        }
                    }
                    else{
                        area.setText("There are Blank Fields");
                        System.out.println("test");
                    }
                }});

【问题讨论】:

    标签: java swing jframe


    【解决方案1】:

    您正在阻塞 EDT(事件调度线程)。

    事件分派线程负责分派所有 UI 事件,一次一个,按照发布的顺序。事件可以是:

    • 按键事件(例如用户按下按键)
    • 鼠标事件(例如用户移动鼠标)
    • 调用事件(例如,您调用了 SwingUtilities.invokeLater() 或 JComponent.repaint()
    • 绘制事件(绘制组件的请求)
    • 动作事件(由发生的 InputEvent 触发的逻辑事件)

    当您调用重绘时,您正在将一个事件推送到队列中,但只要当前事件(actionPerformed 之一)未完成,重绘就不会发生。这就是为什么您的重绘仅在您的 try/catch 完成后才会发生

    在此处阅读更多信息:http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 2018-03-04
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2015-08-13
      相关资源
      最近更新 更多