java swing的ActionListener怎么处理事件的?
发布网友
发布时间:2022-04-26 00:59
我来回答
共3个回答
热心网友
时间:2022-06-19 01:27
你代码里的循环太耗时间了,导致窗口无法正常显示。
主线程里可以正常打开Test2,是因为主线程里的循环是在主线程中进行的,显示Test2的工作是在事件线程里进行的,所以不影响。
但在Test窗口的按钮事件是在事件线程里处理的,太耗时间,导致Test2无法显示,等到循环进行完了,Test2也被关闭了。
一般这种耗时间的操作,都需要在专门的线程中完成,以免阻塞事件线程。
各类教程中都有这种要求的。追问我原以为事件处理中的这句Test2.getInstance().setVisible(true);执行完了才会去循环,希望达到的效果是弹出一个提示框告诉用户这是一个耗时过程,然后处理耗时操作,等操作完成后在关闭窗口
追答你可以将耗时操作放到新线程中,在事件处理中,先显示Test2,然后运行新线程,最后在新线程执行完(最后一条语句)时,再关闭Test2(一般需要使用SwingUtilities.invokeLater(Runnable))
热心网友
时间:2022-06-19 01:27
JButton button=new JButton("button");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
buttonAction(event);
}
});
private void buttonAction(ActionEvent e){
//在这里写你要处理的东西即可
}
没有具体看你的代码
热心网友
时间:2022-06-19 01:28
不懂最好查相关的文档。这样提高快