是否actionPerformed(ActionEvent e)运行在与事件派发线程(EDT)不同的线程中? 说我写了下面的代码:actionPerformed(ActionEvent e)是否运行在与事件派发线程(EDT)不同的线程中?
public void main(String args[]){
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Frame f = new Frame();
f.setVisible(true);
javax.swing.SwingUtilities.isEventDispatchThread()
}
catch(Exception e){ e.printStackTree;}
}
public Frame()
{ //...some code....
JButton btn = new JButton();
//int a;
javax.swing.SwingUtilities.isEventDispatchThread()
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//..some code....
javax.swing.SwingUtilities.isEventDispatchThread()
//a++;
}
}
}
虽然运行javax.swing.SwingUtilities.isEventDispatchThread()returnd在所有三种情况属实,这门槛是不可能做到内部actionPreformed A ++。
我调试了这个项目,并纠正我,如果我错了:所有虽然整个框架从EDT内运行,EDT启动新的不同线程为Frame()构造函数和actionPreformed()函数。然后,因此,为了避免actionPreformed()将使用另一个线程中创建的变量a,该变量可以在actionPreformed()的线程之前结束,它不可能有一个常规的'' int'',只允许'final int''。
因此,此示例中的actionPrefromed()函数是否在与Frame()构造函数的线程不同的线程中运行?
1.1如果不是,那么为什么不能在actionPreformed()函数中修改一个?
1.2如果是,那么我怎样才能存储可以保存在Frame()构造函数中的值?或者至少可以通过其他不同的按钮访问?
为什么创建框架f或将其设置为可视应该在ETD中首先完成?
太多的问题......您的第一个问题与您的下列问题没有任何关系......您的第一个问题:ActionPerformed在edt中运行。 – Ben 2014-09-22 21:16:49