Java框架只显示空白空间

时间:2013-02-25 05:19:55

标签: java swing applet jframe awt

我已成功编译并运行以下代码,但applet窗口除了空格外什么都没显示,可能是什么问题?

我在尝试创建Jframe程序时不试图创建applet

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)

修改

根据您的评论,我添加了一个Main类,并将文件名更改为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();
 }
 }

3 个答案:

答案 0 :(得分:6)

你犯了很多错误......

  • 您似乎试图从HTML代码中运行此类,就像它是一个applet一样,并且由于它不是applet,因此您收到错误。
  • 您的类扩展了JFrame并显示它,但是......
  • 您将所有组件放在另一个 JFrame中,并且没有将任何内容放入您实际尝试显示的JFrame中,即当前对象“this”。 / LI>

我建议:

  • 放弃上面的代码。对不起,但它完全没有价值,不值得尝试“保存”。重新开始。
  • 如果您需要显示小程序,请不要使用JFrame。
  • 而是创建一个扩展JApplet的类,并在其init()方法中,将其contentPane填充到GUI组件中。
  • 如果您想显示一个独立类,那么是,请使用JFrame。
  • 如果是这样,那么不要让你的类扩展JFrame,而是简单地使用JFrame对象并显示它。
  • 将您的类代码转换为创建JPanel,然后在JFrame中显示它。
  • 阅读Swing GUI教程,了解有关如何创建Swing GUI的所有详细信息,但是applet和standalone。

答案 1 :(得分:1)

一些即时评论:

  • 你的类'calc'不是java.applet.Applet或javax.swing.JApplet的扩展,所以它不能立即用作applet。
  • 您从未实例化过在init
  • 中添加到布局中的任何对象

我认为您需要重新阅读并重新阅读如何处理Applet和Java。

编辑,因为OP已经回来并尝试编辑他们的问题以使其更具相关性,我将尝试进一步充实。

我相信@MadProgrammer提供的答案可能是最简洁的,并提供了最详细的地方。

我要做的另一件事就是提到Java不再“捡起来”。 (当前目录)作为类路径的一部分,除非明确说明。

要运行此程序,您应尝试使用以下命令启动:

java -cp . Calc

最近不鼓励'默认'包中的类。考虑放入包装中。

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

我会(严重地)回去阅读

我还建议您阅读Code Conventions for the Java Programing Language(AKA如何结交朋友和影响他人)