【问题标题】:how to extend JFrame in a class that already extends Thread如何在已经扩展 Thread 的类中扩展 JFrame
【发布时间】:2013-01-23 17:36:07
【问题描述】:

我有一个扩展 Thread 的类,需要在同一个类上扩展 JFrame。由于 Java 中无法实现多重继承,如何在已经扩展 Thread 的类中使用 JFrame 对象?

【问题讨论】:

  • Swing GUI 对象应event dispatch thread 上构造和操作。为什么要扩展JFrame
  • 为什么首先需要扩展 JFrame?通常不需要。
  • 关于扩展 JFrame 的问题请参见:stackoverflow.com/questions/1143923/…
  • 您通常应该扩展 既不 JFrame 或 Thread。问题解决了。

标签: java swing inheritance jframe


【解决方案1】:

使用组合而不是扩展 JFrame 或 Thread,它的限制要少得多:

public class MyApplication {
    JFrame applicationFrame;

    Thread someThread;

    MyApplication() {
        SwingUtilities.invokeLater(new Runnable() {
            @Override void run() {
                applicationFrame = new JFrame();

                // some more GUI initialization.
                applicationFrame.setVisible(true);
            }
        });

        someThread = new Thread(new Runnable() {
            @Override void run() {
                // do my work.
            }
        });

        someThread.start();
    }

    public static void main(String... args) {

        new MyApplication();
    }
}

【讨论】:

    【解决方案2】:

    您可以轻松使用 JFrame 和线程而无需扩展它们,并且正如大多数人所建议的那样,您通常更好扩展它们。扩展它们会将您的类绑定到 JFrame,从而阻止您以后在 JPanel、JDialog 等中使用它。如果没有必要,为什么要像这样限制自己?

    【讨论】:

      【解决方案3】:

      除了扩展 Thread 之外,你可以让类实现 Runnable 吗?这样,您可以改为扩展 JFrame,将其传递给线程。

      public class MyFrameThread extends JFrame implements Runnable {
      
          @Override
          public void run() {
              ...
          }
      }
      
      public static void main(String... args) {
          Thread myThread = new Thread(new MyFrameThread());
          myThread.start();
          myThread.join();
      }
      

      【讨论】:

      • 扩展 JFrame 通常是个坏主意
      • 我正在用 java 制作一个套接字程序。我唯一的经验是在 Android 中,所以 java swing 与我习惯的不同。因此,我将制作没有任何 GUI 的控制台应用程序,而不是扩展 JFrame。我这样做是为了测试我稍后将在 Android 中使用的套接字代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多