nullpointerexception - 线程 "AWT-EventQueue-0"中的异常 java.lang.NullPointerException 错误

标签 nullpointerexception runtime-error drjava awt-eventqueue

您好,我是一名高中级别的新程序员,因此我对编程知之甚少,并且遇到了很多已解决的错误,而其他错误我完全不明白。我要做一个简单的Check Box选择程序,用户可以在各种选择之间进行选择,并根据他们的行为改变图像。程序本身编译完美,但是当我运行它时,它给了我一些复杂性。这是我的程序:

package components;

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

public class Workshop extends JPanel
                      implements ItemListener {
JCheckBox winterhatButton;
JCheckBox sportshatButton;
JCheckBox santahatButton;
JCheckBox redshirtButton;
JCheckBox brownshirtButton;
JCheckBox suitButton;
JCheckBox denimjeansButton;
JCheckBox blackpantsButton;
JCheckBox khakipantsButton;


    StringBuffer choices;
JLabel pictureLabel;

public Workshop() {
    super(new BorderLayout());

    //Create the check boxes.
    winterhatButton = new JCheckBox("Winter Hat");
    winterhatButton.setMnemonic(KeyEvent.VK_Q);


    sportshatButton = new JCheckBox("Sports Hat");
    sportshatButton.setMnemonic(KeyEvent.VK_W);


    santahatButton = new JCheckBox("Santa hat");
    santahatButton.setMnemonic(KeyEvent.VK_E);


    redshirtButton = new JCheckBox("Red Shirt");
    redshirtButton.setMnemonic(KeyEvent.VK_R);


    brownshirtButton = new JCheckBox("Brown Shirt");
    brownshirtButton.setMnemonic(KeyEvent.VK_T);


    suitButton = new JCheckBox("Suit");
    suitButton.setMnemonic(KeyEvent.VK_Y);


    suitButton = new JCheckBox("Denim Jeans");
    suitButton.setMnemonic(KeyEvent.VK_U);


    blackpantsButton = new JCheckBox("Black Pants");
    blackpantsButton.setMnemonic(KeyEvent.VK_I);


    khakipantsButton = new JCheckBox("Khaki Pants");
    khakipantsButton.setMnemonic(KeyEvent.VK_O);



    //Register a listener for the check boxes.

    winterhatButton.addItemListener(this);
    sportshatButton.addItemListener(this);
    santahatButton.addItemListener(this);
    redshirtButton.addItemListener(this);
    brownshirtButton.addItemListener(this);
    suitButton.addItemListener(this);
    denimjeansButton.addItemListener(this);
    blackpantsButton.addItemListener(this);
    khakipantsButton.addItemListener(this);


    //Indicates
    choices = new StringBuffer("---------");


    //Set up the picture label
    pictureLabel = new JLabel();
    pictureLabel.setFont(pictureLabel.getFont().deriveFont(Font.ITALIC));
    updatePicture();

     //Put the check boxes in a column in a panel
    JPanel checkPanel = new JPanel(new GridLayout(0, 1));
    checkPanel.add(winterhatButton);
    checkPanel.add(sportshatButton);
    checkPanel.add(santahatButton);
    checkPanel.add(redshirtButton);
    checkPanel.add(brownshirtButton);
    checkPanel.add(suitButton);
    checkPanel.add(denimjeansButton);
    checkPanel.add(blackpantsButton);
    checkPanel.add(khakipantsButton);


    add(checkPanel, BorderLayout.LINE_START);
    add(pictureLabel, BorderLayout.CENTER);
    setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
}


    /** Listens to the check boxes. */
public void itemStateChanged(ItemEvent e) {
    int index = 0;
    char c = '-';
    Object source = e.getItemSelectable();

    if (source == winterhatButton) {
        index = 0;
        c = 'q';
    } else if (source == sportshatButton) {
        index = 1;
        c = 'w';
    } else if (source == santahatButton) {
        index = 2;
        c = 'e';
    } else if (source == redshirtButton) {
        index = 3;
        c = 'r';
    } else if (source == brownshirtButton) {
        index = 4;
        c = 't';
    } else if (source == suitButton) {
        index = 5;
        c = 'y';
    } else if (source == denimjeansButton) {
        index = 6;
        c = 'u';
    } else if (source == blackpantsButton) {
        index = 7;
        c = 'i';
    } else if (source == khakipantsButton) {
        index = 8;
        c = 'o';
    } 


    if (e.getStateChange() == ItemEvent.DESELECTED) {
        c = '-';
    }

    //Apply the change to the string.
    choices.setCharAt(index, c);

    updatePicture();
}


protected void updatePicture() {
    //Get the icon corresponding to the image.
    ImageIcon icon = createImageIcon(
                                "images/bear/bear-"
                                + choices.toString()
                                + ".gif");
    pictureLabel.setIcon(icon);
    pictureLabel.setToolTipText(choices.toString());
    if (icon == null) {
        pictureLabel.setText("Missing Image");
    } else {
        pictureLabel.setText(null);
    }
}

/** Returns an ImageIcon, or null if the path was invalid. */
protected static ImageIcon createImageIcon(String path) {
    java.net.URL imgURL = Workshop.class.getResource(path);
    if (imgURL != null) {
        return new ImageIcon(imgURL);
    } else {
        System.err.println("Couldn't find file: " + path);
        return null;
    }
}

  private static void createAndShowGUI() {
    //Create and set up the window.
    JFrame frame = new JFrame("Build a Bear at Safeer's Workshop!");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Create and set up the content pane.
    JComponent newContentPane = new Workshop();
    newContentPane.setOpaque(true); //content panes must be opaque
    frame.setContentPane(newContentPane);

    //Display the window.
    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {
    //Schedule a job for the event-dispatching thread:
    //creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}
}

到这部分为止,它运行顺利并符合要求,但是当我继续运行该程序时,出现此错误。
> run components.Workshop
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at components.Workshop.<init>(Workshop.java:75)
at components.Workshop.createAndShowGUI(Workshop.java:195)
at components.Workshop.access$0(Workshop.java:189)
at components.Workshop$1.run(Workshop.java:209)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

可能是一个愚蠢的错误,但我似乎无法弄清楚这一点。请帮助并感谢您
     Here is the line that generates that error 
     private void jButtonSendActionPerformed(java.awt.event.ActionEvent evt)   {                                                
    // TODO add your handling code here:
    String message;
    if(messageBox.getText().length() > 0){
        message  =  messageBox.getText();
        chatBox.append(message+"\n"); 
        printStream.println(message);//this line 
        printStream.flush();
        //printStream.close();
        messageBox.setText("");
    }
} 

最佳答案

NullPointerException s 是更容易诊断的异常之一,经常。每当您在 Java 中遇到异常并看到堆栈跟踪时(顺便说一下,这就是您调用的第二个引号块),您会从上到下阅读。通常,您会看到以 Java 库代码或 native 实现方法开始的异常,为了进行诊断,您可以跳过这些异常,直到看到您编写的代码文件。

然后您喜欢在指示的行上查看该行上的每个对象(实例化的类)——其中一个没有被创建,您试图使用它。您可以首先查看您的代码,看看您是否在该对象上调用了构造函数。如果没有,那就是您的问题,您需要通过调用 new Classname(arguments) 来实例化该对象。 NullPointerException的另一个常见原因当存在同名的实例变量时,s 意外地声明了一个具有局部作用域的对象。

在您的情况下,异常发生在第 75 行的 Workshop 构造函数中。<init>表示类的构造函数。如果您查看代码中的那一行,您将看到该行

denimjeansButton.addItemListener(this);

这条线上有很明显的两个对象:denimjeansButtonthis . this与您当前所在的类实例和您在构造函数中的同义词,因此它不能是 this . denimjeansButton是你的罪魁祸首。您从未实例化该对象。要么删除对实例变量 denimjeansButton 的引用或实例化它。

关于nullpointerexception - 线程 "AWT-EventQueue-0"中的异常 java.lang.NullPointerException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21228284/

相关文章:

java - 堆栈实现中的空指针异常

c++ - Win32 Loadimage 生成错误 1812 和 1813

java - 我的 Java 程序没有打印我对 MySQL 进行的查询的结果

java - 我不明白为什么 DrJava 不会输出 Unicode 符号

c++ - AddressSanitizer : SEGV on unknown address 0x000000000000 mean? 是什么

java - "Illegal Class Literal"是什么意思?

java - 无法加载 sigar-amd64-winnt : java. lang.NullPointerException

java - 什么是NullPointerException,我该如何解决?

android - 从应用程序屏幕打开应用程序和最近使用的应用程序列表有什么区别? (安卓

android - java.lang.NullPointerException 在 android.webkit.ZoomManager.setupZoomOverviewWidth(ZoomManager.java :1195)