gpt4 book ai didi

java - 在 try/catch 完成之前,JFrame 不会重绘

转载 作者:行者123 更新时间:2023-11-29 05:53:12 25 4
gpt4 key购买 nike

我有一个程序,它通过我在 main 中调用的函数来获取用户的输入。提交按钮附有一个执行操作的方法。我试图让它在删除输入文件并设置文本以通知用户后重新绘制屏幕。直到在其中包含自定义函数的 try/catch 之后,它才会进行重绘。虽然它会按顺序执行,但不确定我做错了什么?下面是附在我的提交按钮上的我的预制 Action 。一个注意事项是,如果我执行 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");
}
}});

最佳答案

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

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

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

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

在这里阅读更多:http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html

关于java - 在 try/catch 完成之前,JFrame 不会重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13140924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com