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 を拡張し、それを 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();
}
于 2013-02-08T02:05:02.743 に答える
2

JFrames と Threads は拡張しなくても簡単に使用できます。多くの人が示唆しているように、通常は拡張しないがよいでしょう。それらを拡張すると、クラスが JFrame にバインドされ、後で JPanel や JDialog などで使用できなくなります。必要がないのに、なぜこのように制限するのでしょうか?

于 2013-02-08T02:23:41.287 に答える