Bonjour, je suis un nouveau programmeur au niveau secondaire, par conséquent je ne connais pas grand-chose à la programmation et je reçois pas mal d'erreurs qui ont été résolues tandis que d'autres que je ne comprends pas du tout. Je dois faire un simple Check Box
programme de sélection où l'utilisateur peut choisir entre une variété de choix et en fonction de son action l'image change. Le programme lui-même se compile parfaitement, mais quand je l'exécute, cela me donne quelques complications. Voici mon programme:
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();
}
});
}
}
Eh bien jusqu'à cette partie, il fonctionne bien et se conforme, mais lorsque je continue à exécuter le programme, j'obtiens cette erreur.
> 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)
Cela pourrait être une erreur stupide mais je ne peux pas sembler comprendre cela. Aidez et merci
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 font souvent partie des exceptions les plus faciles à diagnostiquer. Chaque fois que vous obtenez une exception dans Java et que vous voyez la trace de la pile (c'est ce que votre deuxième bloc de citation est appelé, soit dit en passant), vous lisez de haut en bas. Souvent, vous verrez exceptions qui commencent dans Java code de bibliothèque ou dans les méthodes d'implémentation natives, pour le diagnostic, vous pouvez simplement les ignorer jusqu'à ce que vous voyiez un fichier de code que vous avez écrit.
Ensuite, vous aimez la ligne indiquée et regardez chacun des objets (classes instanciées) sur cette ligne - l'un d'eux n'a pas été créé et vous avez essayé de l'utiliser. Vous pouvez commencer par rechercher dans votre code pour voir si vous avez appelé le constructeur sur cet objet. Si ce n'est pas le cas, c'est votre problème, vous devez instancier cet objet en appelant un nouveau nom de classe (arguments). Une autre cause fréquente de NullPointerException
s est de déclarer accidentellement un objet avec une portée locale lorsqu'il existe une variable d'instance du même nom.
Dans votre cas, l'exception s'est produite dans votre constructeur pour Workshop sur la ligne 75. <init>
signifie le constructeur d'une classe. Si vous regardez cette ligne dans votre code, vous verrez la ligne
denimjeansButton.addItemListener(this);
Il y a assez clairement deux objets sur cette ligne: denimjeansButton
et this
. this
est synonyme de l'instance de classe dans laquelle vous vous trouvez actuellement et vous êtes dans le constructeur, il ne peut donc pas être this
. denimjeansButton
est votre coupable. Vous n'avez jamais instancié cet objet. Supprimez la référence à la variable d'instance denimjeansButton
ou instanciez-la.
Près du haut du code avec l'atelier public (), je suppose que ce bit,
suitButton = new JCheckBox("Suit");
suitButton.setMnemonic(KeyEvent.VK_Y);
suitButton = new JCheckBox("Denim Jeans");
suitButton.setMnemonic(KeyEvent.VK_U);
devrait peut-être être,
suitButton = new JCheckBox("Suit");
suitButton.setMnemonic(KeyEvent.VK_Y);
denimjeansButton = new JCheckBox("Denim Jeans");
denimjeansButton.setMnemonic(KeyEvent.VK_U);