-4

次のコードを正常にコンパイルして実行しましたが、アプレット ウィンドウには空白以外は何も表示されません。何が問題なのですか?

ここでアプレットを作成しようとしているのではなく、Jframeプログラムを作成しようとしています

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

//<applet code="calc.class" width=400 height=200></applet>
public class calc extends JFrame implements ActionListener {
    JFrame f1;
    JPanel p1 = new JPanel();
    JLabel l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15,
            l16, l17, l18, l19, l20, l21, l22, l23, l24;
    JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15,
            b16;
    JTextField t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11;

    public void init() {
        f1 = new JFrame("Administrator");
        p1.setLayout(new GridLayout(3, 2));
        p1.add(l1);
        p1.add(t1);
        p1.add(l2);
        p1.add(b1);
        p1.add(b2);
        f1.add(p1);
        f1.setSize(300, 300);
        f1.setVisible(true);

    }

    public void actionPerformed(ActionEvent AE) {

    }

    public void main(String[] args) {
        calc s = new calc();
        s.init();
    }
}

CMD ウィンドウで、次の例外が発生します

java.lang.ClassCastException: calc cannot be cast to java.applet.Applet
        at sun.applet.AppletPanel.createApplet(AppletPanel.java:795)
        at sun.applet.AppletPanel.runLoader(AppletPanel.java:724)
        at sun.applet.AppletPanel.run(AppletPanel.java:378)
        at java.lang.Thread.run(Thread.java:722)

編集

あなたのコメントによると、メインクラスを追加し、ファイル名をcool.javaに変更しましたが、まだ機能していません

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//<applet code="calc.class" width=400 height=200></applet>
public class calc extends JFrame implements ActionListener
{
JFrame f1;
JPanel p1=new JPanel();
JLabel l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12,l13,l14,l15,l16,l17,l18,l19,l20,l21,l22,l23,l24;
    JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16;
    JTextField t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11;
public void init()
{
f1=new JFrame("Administrator");
p1.setLayout(new GridLayout(3,2));
        p1.add(l1);p1.add(t1);p1.add(l2);
        p1.add(b1);p1.add(b2);
        f1.add(p1);
        f1.setSize(300,300);
        f1.setVisible(true);

}
 public void actionPerformed(ActionEvent AE)
 {

 }

}
public class cool
{
 public static void main(String[]args)
 {
 calc s=new calc();
 s.init();
 }
 }
4

3 に答える 3

6

エラーが多いですね…

  • アプレットであるかのように HTML コードからこのクラスを実行しようとしているようですが、アプレットではないため、エラーが発生しています。
  • あなたのクラスは JFrame を拡張し、それを表示していますが...
  • すべてのコンポーネントを別のJFrame に配置し、実際に表示しようとしている JFrame には何も配置していません。現在のオブジェクトは " this" です。

私は提案します:

  • 上記のコードを破棄します。申し訳ありませんが、それはまったく価値がなく、「保存」しようとする価値はありません。最初からやり直してください。
  • アプレットを表示する必要がある場合は、JFrame を使用しないでください。
  • 代わりに、JApplet を拡張するクラスを作成し、そのinit()メソッドで、その contentPane に GUI コンポーネントのグッズを詰め込みます。
  • スタンドアロン クラスを表示する場合は、はい、JFrames を使用します。
  • その場合、クラスで JFrame を拡張するのではなく、単に JFrame オブジェクトを使用して表示します。
  • クラス コードを JPanel の作成に向けて調整し、それを JFrame に表示します。
  • Swing GUI チュートリアルを読んで、アプレットとスタンドアロンの Swing GUI の作成方法に関するすべての詳細を学習してください。
于 2013-02-25T05:22:45.893 に答える
1

いくつかの即時コメント:

  • クラス 'calc' は java.applet.Applet または javax.swing.JApplet の拡張ではないため、すぐにアプレットとして使用することはできません。
  • init でレイアウトに追加するオブジェクトをインスタンス化していない

アプレットとJavaの一般的な扱い方について、戻って読み直す必要があると思います。

編集OPが戻ってきて、質問を編集して関連性を高めようとしたので、もう少し肉付けしてみます。

@MadProgrammer によって提供された回答は、おそらく最も簡潔で、どこを見るべきかについて最も詳細な情報を提供すると思います。

もう 1 つ付け加えておきたいのは、Java が「.」を認識しなくなったことです。(現在のディレクトリ) 明示的に指定されていない限り、クラスパスの一部として。

このプログラムを実行するには、次のコマンドで起動を試みる必要があります。

java -cp . Calc

「デフォルト」パッケージのクラスは最近推奨されていません。同梱もご検討ください。

于 2013-02-25T05:23:55.560 に答える
1

すでに投稿されているすべての優れた回答に追加するには...

何も初期化していないため、すべてのコンポーネントnull、これは基本的な Java/Swing です。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Calc extends JFrame implements ActionListener {

//    JFrame f1; // Don't need this, as you are already extending from a JFrame!!
    JPanel p1 = new JPanel();
    JLabel l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24;
    JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16;
    JTextField t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11;

    public Calc() {
        super("Administrator");
        // You've not initalised anything, so it would normally throw a NullPointerException
        p1 = new JPanel(new GridLayout(3, 2));

        l1 = new JLabel("l1");
        t1 = new JTextField(2);
        l2 = new JLabel("l2");
        b1 = new JButton("B1");
        b2 = new JButton("B2");

        p1.add(l1);
        p1.add(t1);
        p1.add(l2);
        p1.add(b1);
        p1.add(b2);
        add(p1);
        // Use pack instead...
//        setSize(300, 300);
        pack();
        setVisible(true);

    }

    public void actionPerformed(ActionEvent AE) {
    }

    public static void main(String[] args) {
        Calc s = new Calc();
    }
}

私は(真剣に)戻って読んでみたい

また、Java プログラミング言語のコード規則(別名、友達を作り、人々に影響を与える方法) を読むことをお勧めします。

于 2013-02-25T06:04:25.887 に答える