2

我有一个扩展 Thread 的类,并且需要在同一个类上扩展 JFrame。由于在 Java 中不可能进行多重继承,它如何在已经扩展 Thread 的类中使用 JFrame 对象?

4

3 回答 3

13

不是扩展 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();
    }
}
于 2013-02-08T02:24:31.167 回答
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();
}
于 2013-02-08T02:05:02.743 回答
2

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

于 2013-02-08T02:23:41.287 回答