简体   繁体   English

问题使程序运行JAVA

[英]Issue getting program to run JAVA

I am having issues trying to get this program to run, I can't seem to find where my error(s) are, can anyone help? 我在尝试使该程序运行时遇到问题,我似乎找不到我的错误在哪里,有人可以帮忙吗? When I run the program, I get the following error: 运行程序时,出现以下错误:

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)

I can't seem to figure out what exactly I am doing wrong. 我似乎无法弄清楚我到底在做什么错。

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));




}
        }

Looks like you are trying to add buttons which are not initialized 看起来您正在尝试添加未初始化的按钮

 add(okButton);
 add(cancelButton);

You should initialize both of them before adding them 在添加它们之前,应先初始化它们

Button okButton = new Button(..);
Button cancelButton = new Button(..);

You have to previously initialize both Button objects before adding to the Applet's content pane. 在添加到Applet的内容窗格之前,必须先初始化两个Button对象。

Also, your Applet isn't "listening" to the events generated by the buttons, you also need to check what type of event is being processed in the actionPerformed method. 另外,Applet不会“监听”按钮生成的事件,您还需要检查actionPerformed方法中正在处理的事件类型。

I know I shouldn't give you the fish straight away, but here's a possible solution: 我知道我不应该立即给你钓鱼,但是这是一个可能的解决方案:

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));
    }
}

You should study the AWT and Swing libraries in order to understand some key concepts and design patterns. 您应该学习AWTSwing库,以了解一些关键概念和设计模式。 Good luck. 祝好运。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM