0

我在试图让这个程序运行时遇到问题,我似乎无法找到我的错误在哪里,有人可以帮忙吗?当我运行程序时,我收到以下错误:

java.lang.NullPointerException
atjava.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at LargestApplet.init(LargestApplet.java:40)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

我似乎无法弄清楚我到底做错了什么。

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


    public class LargestApplet extends Applet implements ActionListener {

        private static final long serialVersionUID = 1L;
        int number =0;
        double highNumber=-1;
        double lowNumber=-1;



        // Create components for applet
        Label numberLabel = new Label("Enter a number:");
        TextField numberField = new TextField(5);
        Button okButton;
        Button cancelButton;
        Label highNumberOutputLabel = new Label("The Highest number is: 0         ");

        public void init() {
            add(numberLabel);
            add(numberField);
            numberField.requestFocus();
            add(okButton);
            add(cancelButton);
            add(highNumberOutputLabel);
            setSize(400, 500);  // Sets the size of the applet window
        }
        public void actionPerformed(ActionEvent e) {
            int number = 0, highNumber = -1;

            if (numberField.getText().length() == 0) {
                numberField.requestFocus();
                JOptionPane.showMessageDialog(null,
                        "Number Cannot blank", "D A T A   E R R O R",
                        JOptionPane.ERROR_MESSAGE);
                return;
            }
            try {
                number = Integer.parseInt(numberField.getText());
            } catch (NumberFormatException ex) {
                numberField.requestFocus();
                JOptionPane.showMessageDialog(null, "Number is invalid",
                        "D A T A   E R R O R", JOptionPane.ERROR_MESSAGE);
                return;
            }
            if (number < 0 || number > 10) {
                numberField.requestFocus();
                JOptionPane.showMessageDialog(null,
                        "Number must be between 0 and 10",
                        "D A T A   E R R O R", JOptionPane.ERROR_MESSAGE);
                return;
            }
            // Determine highest number
            Integer [] numberAr = {number};
            for(int i = 0; i < numberAr.length; i++)
            {
                number += numberAr[i];
                if (numberAr[i] < lowNumber)
                    lowNumber = numberAr[i];
                else if (numberAr[i] > highNumber)
                    highNumber = numberAr[i];
            }

            // Display the results
            highNumberOutputLabel.setText("The Highest Number is:   "
                    + (highNumber));




}
        }
4

2 回答 2

1

看起来您正在尝试添加未初始化的按钮

 add(okButton);
 add(cancelButton);

您应该在添加它们之前初始化它们

Button okButton = new Button(..);
Button cancelButton = new Button(..);
于 2013-09-08T17:37:12.650 回答
0

在添加到 Applet 的内容窗格之前,您必须预先初始化这两个 Button 对象。

此外,您的 Applet 不会“监听”按钮生成的事件,您还需要检查actionPerformed方法中正在处理的事件类型。

我知道我不应该马上给你鱼,但这里有一个可能的解决方案:

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


public class LargestApplet extends Applet implements ActionListener {

    private static final long serialVersionUID = 1L;
    int number =0;
    double highNumber=-1;
    double lowNumber=-1;



    // Create components for applet
    Label numberLabel = new Label("Enter a number:");
    TextField numberField = new TextField(5);
    Button okButton = new Button("OK");
    Button cancelButton = new Button("Cancel");
    Label highNumberOutputLabel = new Label("The Highest number is: 0         ");

    public void init() {
        add(numberLabel);
        add(numberField);
        numberField.requestFocus();

        add(okButton);
        add(cancelButton);
        add(highNumberOutputLabel);

        okButton.addActionListener(this);
        cancelButton.addActionListener(this);

        okButton.setActionCommand("ok");
        cancelButton.setActionCommand("cancel");

        setSize(400, 500);  // Sets the size of the applet window
    }
    public void actionPerformed(ActionEvent e) {
        int number = 0, highNumber = -1;

        String command = e.getActionCommand();

        if(command.equals("cancel"))
            System.exit(0);

        if (numberField.getText().length() == 0) {
            numberField.requestFocus();
            JOptionPane.showMessageDialog(null,
                    "Number Cannot blank", "D A T A   E R R O R",
                    JOptionPane.ERROR_MESSAGE);
            return;
        }
        try {
            number = Integer.parseInt(numberField.getText());
        } catch (NumberFormatException ex) {
            numberField.requestFocus();
            JOptionPane.showMessageDialog(null, "Number is invalid",
                    "D A T A   E R R O R", JOptionPane.ERROR_MESSAGE);
            return;
        }
        if (number < 0 || number > 10) {
            numberField.requestFocus();
            JOptionPane.showMessageDialog(null,
                    "Number must be between 0 and 10",
                    "D A T A   E R R O R", JOptionPane.ERROR_MESSAGE);
            return;
        }
        // Determine highest number
        Integer [] numberAr = {number};
        for(int i = 0; i < numberAr.length; i++)
        {
            number += numberAr[i];
            if (numberAr[i] < lowNumber)
                lowNumber = numberAr[i];
            else if (numberAr[i] > highNumber)
                highNumber = numberAr[i];
        }

        // Display the results
        highNumberOutputLabel.setText("The Highest Number is:   "
                + (highNumber));
    }
}

您应该研究AWTSwing库以了解一些关键概念和设计模式。祝你好运。

于 2013-09-08T18:02:28.207 回答