Hallo, ich bin ein neuer Programmierer auf der Highschool-Ebene, daher weiß ich nicht viel über Programmieren und erhalte eine ganze Reihe von Fehlern, die behoben wurden, während andere ich überhaupt nicht verstehe. Ich soll ein einfaches Check Box
- Auswahlprogramm erstellen, in dem der Benutzer zwischen verschiedenen Auswahlmöglichkeiten wählen kann und je nach Aktion das Bild wechselt. Das Programm selbst wird perfekt kompiliert, aber wenn ich es ausführe, entstehen mir einige Komplikationen. Hier ist mein Programm:
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();
}
});
}
}
Gut bis zu diesem Teil läuft es reibungslos und entspricht, aber wenn ich fortfahre, das Programm auszuführen, erhalte ich diesen Fehler.
> 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)
Könnte ein dummer Fehler sein, aber ich kann das nicht herausfinden. Bitte helfen Sie und danke
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 gehören häufig zu den am einfachsten zu diagnostizierenden Ausnahmen. Wann immer Sie eine Ausnahme in Java und Sie sehen den Stack-Trace (so heißt übrigens Ihr zweiter Anführungszeichenblock), lesen Sie von oben nach unten. Oft werden Sie sehen Ausnahmen, die im Java Bibliothekscode oder in systemeigenen Implementierungsmethoden beginnen, können zur Diagnose einfach übersprungen werden, bis eine von Ihnen geschriebene Codedatei angezeigt wird.
Dann mögen Sie die angegebene Zeile und sehen sich jedes der Objekte (instanziierte Klassen) in dieser Zeile an - eines davon wurde nicht erstellt und Sie haben versucht, es zu verwenden. Sie können damit beginnen, in Ihrem Code nachzuschlagen, ob Sie den Konstruktor für dieses Objekt aufgerufen haben. Wenn dies nicht der Fall ist, müssen Sie das Objekt instanziieren, indem Sie den neuen Klassennamen (Argumente) aufrufen. Eine weitere häufige Ursache für NullPointerException
s ist die versehentliche Deklaration eines Objekts mit lokalem Gültigkeitsbereich, wenn eine Instanzvariable mit demselben Namen vorhanden ist.
In Ihrem Fall ist die Ausnahme in Ihrem Konstruktor für Workshop in Zeile 75 aufgetreten. <init>
bezeichnet den Konstruktor für eine Klasse. Wenn Sie in Ihrem Code auf diese Zeile schauen, sehen Sie die Zeile
denimjeansButton.addItemListener(this);
In dieser Zeile befinden sich zwei Objekte: denimjeansButton
und this
. this
ist gleichbedeutend mit der Klasseninstanz, in der Sie sich gerade befinden und in der Sie sich im Konstruktor befinden. Es kann also nicht this
sein. denimjeansButton
ist dein Schuldiger. Sie haben dieses Objekt nie instanziiert. Entfernen Sie den Verweis auf die Instanzvariable denimjeansButton
oder instanziieren Sie ihn.
Im oberen Bereich des Codes mit dem Public Workshop () nehme ich dieses Bit an,
suitButton = new JCheckBox("Suit");
suitButton.setMnemonic(KeyEvent.VK_Y);
suitButton = new JCheckBox("Denim Jeans");
suitButton.setMnemonic(KeyEvent.VK_U);
sollte vielleicht sein,
suitButton = new JCheckBox("Suit");
suitButton.setMnemonic(KeyEvent.VK_Y);
denimjeansButton = new JCheckBox("Denim Jeans");
denimjeansButton.setMnemonic(KeyEvent.VK_U);