-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”。

我建议:

  • 丢弃上面的代码。对不起,但它完全没有价值,不值得尝试“拯救”。重来。
  • 如果您需要显示小程序,请不要使用 JFrames。
  • 而是创建一个扩展 JApplet 的类,并在它的init()方法中,用你的 GUI 组件的好东西填充它的 contentPane。
  • 如果你想显示一个独立的类,那么可以,使用 JFrames。
  • 如果是这样,那么不要让您的类扩展 JFrame,而只需使用 JFrame 对象并显示它。
  • 将您的类代码用于创建 JPanel,然后将其显示在 JFrame 中。
  • 阅读 Swing GUI 教程以了解有关如何创建 Swing GUI(包括小程序和独立的)的所有详细信息。
于 2013-02-25T05:22:45.893 回答
1

几个即时评论:

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

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

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

我相信@MadProgrammer 提供的答案可能是最简洁的,并且提供了最详细的查看位置。

我要做的另一件事是提到 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 编程语言的代码约定(AKA 如何结交朋友和影响他人)

于 2013-02-25T06:04:25.887 回答