如何让一个线程调用多个JForms?

时间:2011-10-08 05:30:47

标签: java multithreading swing runnable

假设我有一个线程正在运行(我正在创建此线程的许多实例),并在其中实例化JForm。在JForm内,我打电话给另一个JForm。将其视为多步注册流程。当我在第二个表单中时,先前创建的线程是否仍在run()内?或者是新的JForm创建一个新线程?我希望第一个线程保持活动状态,并在整个生命周期内访问共享资源。

class Form1 extends JForm{
   public void jButton1ActionPerformed(..){
      ///show Form2
   }
}
class A extends Thread{
  public void run() {
     //show Form1
  }
}

class Main {
 public static void main(String args[]){
    new A().start();
    new A().start();
    new A().start();
}

感谢。

2 个答案:

答案 0 :(得分:1)

当您创建并运行A线程时,您只需显示表单并继续执行该线程。另外,在单个专用的Swing Thread(自动启动)上,用户点击将被捕获并处理,从而调用jButton1ActionPerformed。该代码块将在Swing线程内执行。

希望有所帮助。请注意,您可以为线程命名,并始终使用Thread.currentThread().getName()来帮助您进一步了解代码中发生的情况。

答案 1 :(得分:1)

如果要在非EDT线程中创建和显示Swing组件,则必须将Swing代码放在Runnable中并将其排在事件线程上,如下所示:

class A extends Thread{
   public void run() {
      //show Form1
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            Form1 form1 = new Form1();
            form1.setVisible(true);
         }
      });
   }
 }

因此,无论您创建多少个“A”对象,从而分离您创建的新线程,所有Swing代码都将在同一个线程上运行。