3

以下のアプレットを実行しています。その中で、コンストラクターを追加した瞬間 (空の場合でも)、アプレットは実行時例外をスローします。

MainFrame.class can't be instantiated, java.lang.InstantiationException 

コンストラクターを削除しても、例外はスローされません。アプレットにコンストラクターを含めることはできませんか?

public class MainFrame extends JApplet implements  WindowListener, ActionListener {
    public void init()
    {       
        System.out.println("Applet Step1");
        String[] args = null;
        createAndShowGUI(args);      
    }
    private static void createAndShowGUI(String[] args) { /*code*/ }
    public MainFrame(final String[] args) {}
}
4

3 に答える 3

6

デフォルトのコンストラクターも追加する必要があります...

public MainFrame() {}
于 2011-06-22T17:51:20.030 に答える
3

クラスのインスタンスがブラウザ自体 (または、このタスクを jre のアプレットビューアまたはプラグインに委譲するブラウザ) によってインスタンス化されるため、デフォルトのコンストラクタが必要です。

ブラウザはクラスについて何も知らないため、すべてのアプレット クラスで動作する唯一の方法は、パラメータの標準セットを使用してそれらをインスタンス化することです。そして、アプレットの場合、このパラメーターのセットは単純です: 空のセットです。

そのため、クラスにデフォルトの (パラメーターなしの) コンストラクターが必要です。

その後、@Rocky Tritonは正しいです。Javaでは、クラスにコンストラクターを提供しない場合、Javaはデフォルトのコンストラクターを提供します。しかし、コンストラクターを提供するとすぐに、それが何であれ、Java はデフォルトのコンストラクターを提供しなくなります (何らかの方法で、クラスのインスタンス化を担当するようになります)。

したがって、あなたの場合、コンストラクターにパラメーターを提供することにした場合、Java はデフォルトのコンストラクターを提供せず、ブラウザーはクラスをインスタンス化できません。

よろしく、ステファン

于 2011-06-22T18:03:22.753 に答える