如何在已经扩展Thread的类中扩展JFrame

时间:2013-02-08 01:35:40

标签: java swing inheritance jframe

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

3 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:3)

你可以让类实现Runnable而不是扩展Thread吗?这样,您可以扩展JFrame,将其传递给Thread。

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();
}

答案 2 :(得分:2)

您可以轻松使用JFrame和线程而不扩展它们,正如大多数人所建议的那样,您通常更好关闭而不是扩展它们。扩展它们会将你的类绑定到JFrame,阻止你以后在JPanel,JDialog等中使用它。为什么在没有必要的情况下限制自己?