Uitzondering in draad “AWT-EventqueUe-0” Java.lang.nullPointerException Fout

Hallo, ik ben een nieuwe programmeur op een middelbare schoolniveau als gevolg hiervan, ik weet niet veel over programmering en krijg een behoorlijk paar fouten die zijn opgelost terwijl anderen die ik helemaal niet begrijp. Ik ben om een ​​eenvoudig Check BoxSelectieprogramma te maken waar de gebruiker kan kiezen tussen verschillende keuzes en afhankelijk van hun actie, verandert de beeldverandering. Het programma compileert zich perfect, maar toen ik het ren. Het geeft me echter enkele complicaties. Hier is mijn programma:

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

Goed tot dit deel loopt het soepel en voldoet maar wanneer ik verder ga om het programma uit te voeren, krijg ik deze foutmelding.

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

is misschien een domme fout, maar ik kan dit niet lijken te achterhalen. Help alstublieft en bedankt

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

Antwoord 1, autoriteit 100%

NullPointerExceptions behoren tot de gemakkelijkste uitzonderingen om vaak te diagnosticeren. Telkens wanneer je een uitzondering krijgt in Java en je ziet de stacktracering (zo wordt je tweede aanhalingsteken trouwens genoemd), lees je van boven naar beneden. Vaak zie je uitzonderingen die beginnen in Java-bibliotheekcode of in native implementatiemethoden, voor diagnose kun je die gewoon overslaan totdat je een codebestand ziet dat je hebt geschreven.

Vervolgens ga je naar de aangegeven regel en kijk je naar elk van de objecten ( geïnstantieerde klassen ) op die regel — een ervan is niet gemaakt en je hebt geprobeerd deze te gebruiken. U kunt beginnen door in uw code op te zoeken om te zien of u de constructor van dat object hebt aangeroepen. Als je dat niet deed, dan is dat jouw probleem, je moet dat object instantiëren door nieuwe Classname(-argumenten) aan te roepen. Een andere veelvoorkomende oorzaak van NullPointerExceptions is het per ongeluk declareren van een object met een lokaal bereik wanneer er een instantievariabele met dezelfde naam is.

In jouw geval deed de uitzondering zich voor in je constructor voor Workshop op regel 75. <init>betekent de constructor voor een klasse. Als je op die regel in je code kijkt, zie je de regel

denimjeansButton.addItemListener(this);

Er zijn redelijk duidelijk twee objecten op deze regel: denimjeansButtonen this. thisis synoniem met de klasse-instantie waarin u zich momenteel bevindt en u bevindt zich in de constructeur, dus het kan niet thiszijn. denimjeansButtonIS UW CULPRIT. Je hebt nooit dat object geïnstantieerd. Verwijder ofwel de verwijzing naar de exemplaarvariabele denimjeansButtonof instanteer het.


Antwoord 2

Dicht bij de bovenkant van de code met de openbare workshop (), neem ik dit bit aan,

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

Moet misschien zijn,

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

Other episodes