Ausnahme im Thread AWT-EventQueue-0 java.lang.NullPointerException

Sheeraz Gul 12 Oktober 2023
Ausnahme im Thread AWT-EventQueue-0 java.lang.NullPointerException

Die Ausnahme "AWT-EventQueue-0" java.lang.NullPointerException tritt auf, wenn wir mit Java-AWT-Paketmethoden arbeiten und ein null-Wert an eine beliebige Methode übergeben wird. Dieses Tutorial zeigt, wie man diese NullPointerException in Java löst.

Ausnahme im Thread "AWT-EventQueue-0" java.lang.NullPointerException in Java

Die "AWT-EventQueue-0" java.lang.NullPointerException tritt auf, wenn wir einen Nullwert an das AWT-Paket übergeben. Die Ausnahme NullPointerException ist die häufigste in Java.

Die NullPointerException tritt auf, wenn eine der folgenden Bedingungen erfüllt ist.

  1. Beim Zugreifen und Ändern des Objektfelds null.
  2. Wenn wir eine Methode von einem null-Objekt aufrufen.
  3. Beim Zugriff auf und Ändern der Slots des null-Objekts.
  4. Wenn Sie die Länge eines beliebigen null-Arrays nehmen.
  5. Wenn wir versuchen, über ein null-Objekt zu synchronisieren.
  6. Wenn wir einen null-Wert werfen.

Lassen Sie uns ein Beispiel ausprobieren, das die "AWT-EventQueue-0" java.lang.NullPointerException in Java auslöst.

package delftstack;

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

@SuppressWarnings("serial")

public class Example extends JFrame implements ActionListener, KeyListener {
  static Dimension Screen_Size = new Dimension(Toolkit.getDefaultToolkit().getScreenSize());
  Insets Scan_Max = Toolkit.getDefaultToolkit().getScreenInsets(getGraphicsConfiguration());
  int Task_Bar_Size = Scan_Max.bottom;
  static JFrame Start_Screen = new JFrame("Start Screen");
  static JFrame Game_Frame = new JFrame("Begin the Game!");
  static JLabel Cow_Label = new JLabel();
  static int Sky_Int = 1;
  static JLabel Sky_Label = new JLabel();
  static int SECONDS = 1;
  static boolean IS_Pressed = false;
  public static void main(String[] args) {
    new Example();
  }
  public Example() {
    JPanel Buttons_Panel = new JPanel();
    Buttons_Panel.setLayout(null);
    Start_Screen.setSize(new Dimension(
        Screen_Size.width - getWidth(), Screen_Size.height - Task_Bar_Size - getHeight()));
    Start_Screen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Start_Screen.setVisible(true);
    System.out.println(Start_Screen.getSize());

    // buttons

    JButton Start_Button = new JButton("Start");
    Start_Button.addActionListener(this);
    Start_Button.setSize(
        (int) Start_Screen.getWidth() / 7, (int) (Start_Screen.getHeight() / 15.36));
    Start_Button.setBounds((Start_Screen.getWidth() / 2) - Start_Button.getWidth() / 2,
        ((int) Start_Screen.getHeight() / 2) - Start_Button.getHeight(), Start_Button.getWidth(),
        Start_Button.getHeight());
    Start_Button.setActionCommand("Start");

    Buttons_Panel.add(Start_Button);
    Start_Screen.add(Buttons_Panel);
  }
  @Override
  public void actionPerformed(ActionEvent Action_Event) {
    Object CMD_Object = Action_Event.getActionCommand();
    if (CMD_Object == "Start") {
      Start_Screen.setVisible(false);
      //  getClass().getResource("/cow.png") and getClass().getResource("/grass.png") is giving null
      // because there is no image in folder named cow.png or grass.png
      ImageIcon Cow_Image = new ImageIcon(getClass().getResource("/cow.png"));
      ImageIcon Grass_Image = new ImageIcon(getClass().getResource("/grass.png"));

      Game_Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      Game_Frame.setSize(Start_Screen.getSize());
      Game_Frame.setVisible(true);
      JPanel Demo_Panel = new JPanel();
      Demo_Panel.setBackground(Color.white);
      Demo_Panel.setLayout(null);
      Demo_Panel.setFocusable(true);
      Game_Frame.add(Demo_Panel);
      Demo_Panel.addKeyListener(this);
      Cow_Label.setBounds(
          (Start_Screen.getWidth() / 2) - 105, (Start_Screen.getHeight() / 2) - 55, 210, 111);
      Cow_Label.setIcon(Cow_Image);
      Demo_Panel.add(Cow_Label);
      Demo_Panel.setVisible(true);
      Cow_Label.setVisible(true);
      JLabel Grass_Label = new JLabel();
      System.out.println("grass");
      //  getClass().getResource("/Sky.png") will throw a nullpointerexception because there is no
      //  image in the folder
      ImageIcon Sky1 = new ImageIcon(getClass().getResource("/Sky.png"));
      Sky_Label.setIcon(Sky1);
      Grass_Label.setIcon(Grass_Image);
      Grass_Label.setBounds(0, (Start_Screen.getHeight() - 308), Start_Screen.getWidth(), 350);
      System.out.println("mOooow");
      Demo_Panel.add(Grass_Label);
      Sky_Label.setBounds(1, 56, 1366, 364);
      Demo_Panel.add(Sky_Label);
      System.out.println("google");
    }
  }
  @Override
  public void keyPressed(KeyEvent Key_Event) {
    int CMD_Int = Key_Event.getKeyCode();
    //  getClass().getResource("/cow moving.gif") will throw a nullpointerexception because there is
    //  no image in the folder
    ImageIcon Moving_Cow = new ImageIcon(getClass().getResource("/cow moving.gif"));
    System.out.println(CMD_Int);
    IS_Pressed = true;
    if (CMD_Int == 39) {
      System.out.println("Key is Pressed");
      Cow_Label.setIcon(Moving_Cow);
    } else if (CMD_Int == 37) {
    }
    System.out.println("End");
    while (IS_Pressed == true) {
      Timer Wait_Please = new Timer("Wait Please");
      try {
        Wait_Please.wait(1000);
      } catch (InterruptedException p) {
      }
      int SKY = 1;
      SKY += 1;
      String SKY_String = "/Sky" + String.valueOf(SKY) + ".png";
      ImageIcon SKy = new ImageIcon(getClass().getResource(SKY_String));
      Sky_Label.setIcon(SKy);
      if (IS_Pressed == false) {
        Wait_Please.cancel();
        break;
      }
    }
  }

  @Override
  public void keyReleased(KeyEvent Key_Event) {
    //  getClass().getResource("/cow.png") and getClass().getResource("/grass.png") is giving null
    // because there is no image in folder named cow.png or grass.png
    ImageIcon Cow_Image = new ImageIcon(getClass().getResource("/cow.png"));
    int CMD_Int = Key_Event.getKeyCode();
    IS_Pressed = false;
    if (CMD_Int == 39) {
      Cow_Label.setIcon(Cow_Image);
    } else if (CMD_Int == 37) {
      Cow_Label.setIcon(Cow_Image);
    }
  }
  @Override
  public void keyTyped(KeyEvent c) {
    // TODO Auto-generated method stub
  }
}

Der obige Code handelt von einem einfachen Spiel mit einer stehenden Kuh, und die Kuh beginnt sich zu bewegen, wenn Sie auf die Schaltfläche drücken. Es wird die "AWT-EventQueue-0" java.lang.NullPointerException auslösen, da die AWT-Methode new ImageIcon(getClass().getResource()) einen null-Eintrag erhält.

Die Ausgabe für diesen Code ist:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "java.net.URL.toExternalForm()" because "location" is null
    at java.desktop/javax.swing.ImageIcon.<init>(ImageIcon.java:234)
    at delftstack.Example.actionPerformed(Example.java:48)
    at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972)
    at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2313)
...

Wir können dieses Problem lösen, indem wir die Bilder in den Pfad des Klassenordners verschieben. Wir können auch das / entfernen, da Windows \\ als Pfad in Java verwendet.

Und wenn es immer noch nicht funktioniert, können wir den vollständigen Pfad zu den Bildern angeben. Weitere Erläuterungen sind im obigen Code auskommentiert.

Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Verwandter Artikel - Java Exception