Java 如何保持一个线程调用多个JForms?

Java 如何保持一个线程调用多个JForms?,java,multithreading,swing,runnable,Java,Multithreading,Swing,Runnable,假设我有一个线程正在运行(我正在创建这个线程的多个实例),在其中我实例化了一个JForm。在JForm中,我调用另一个JForm。可以将其视为一个多步骤注册过程。当我在第二个表单中时,以前创建的线程是否仍在run()中?或者新的JForm正在创建一个新线程?我想让第一个线程保持活动状态,并在其生命周期内访问共享资源 class Form1 extends JForm{ public void jButton1ActionPerformed(..){ ///show Form2

假设我有一个线程正在运行(我正在创建这个线程的多个实例),在其中我实例化了一个
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();
}

谢谢

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


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

如果要从非EDT线程中创建和显示Swing组件,必须将Swing代码放置在可运行线程中,并在事件线程中对其进行排队,如下所示:

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代码都将在同一个线程上运行

如何创建线程的“多个实例”?请澄清。此外,所有Swing代码都是在一个线程EDT上创建的,因此您的问题和描述非常混乱;新的A().start()。。。好的,但即使如此,所有Swing代码都必须在一个线程EDT上调用,通常是通过SwingUtilities.invokeLater(…)将Runnable排队到事件线程上。同样,您需要澄清您正在尝试做什么。“访问共享资源…”是什么意思?如果是一个变量,那么这与线程是活的还是死的无关。如果不是一个变量,那又怎样?我来看看EDT的东西。每个对象(活动实体又名线程)在活动时必须使用互斥/共享资源(被动实体)中的方法。因此,共享资源将具有用于互斥的同步方法。wait()、notify()、notifyAll()将包含在互斥锁中,以控制试图获取其锁和调用方法的线程(对象)。我已经在上面对我的共享资源设置进行了评论。请看一看。谢谢