2011-06-22 14 views
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) {} 
} 
+0

は 'createAndShowGUIは、(文字列[])' 'static'宣言する必要はありません。 –

答えて

6

あなたのクラスのインスタンスは、ブラウザ自体(またはこれを委任するブラウザによってインスタンス化されようとしているよう...

public MainFrame() {} 
+2

クラスにコンストラクタを追加するとすぐに、デフォルトのコンストラクタが失われます。デフォルトのコンストラクタは、別のコンストラクタが存在する場合を除いて、javaによって自動的に作成されます。 –

+1

はコンストラクタについて正しいです。しかし、ここでデフォルトのコンストラクタが必要なのはなぜなのでしょうか?あなたが受け取ったエラーを投稿できますか? – Snicolas

+2

彼がエラーを出した理由は、ブラウザが基本的に "new MainFrame();"を呼び出してアプレットのインスタンスを作成しようとしたためです。しかし、そのコンストラクタはもはや存在しないため、彼はInstantiationExceptionを取得します。 –

3

は、デフォルトのコンストラクタを必要としますタスクをjreのappletviewerまたはプラグインに)。

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

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

その後、@ Rocky Tritonは正しいです:javaでは、クラスにコンストラクタを指定しないと、javaはデフォルトコンストラクタを提供します。しかし、コンストラクタを提供するとすぐに、javaはデフォルトのコンストラクタをもう提供しません(何らかの形で、クラスのインスタンス化の責任を負うことになります)。

したがって、コンストラクタにパラメータを指定すると、javaはデフォルトのコンストラクタを提供せず、ブラウザはクラスをインスタンス化できなくなります。

よろしく、

ステファン
関連する問題