HOWTO · Java

スレッド AWT-EventQueue-0 の例外 java.lang.NullPointerException

このチュートリアルでは、Java でスレッド awt-eventqueue-0 java.lang.nullpointerexception エラーの例外を解決する方法を示します。

このページの内容

"AWT-EventQueue-0" java.lang.NullPointerException 例外は、Java AWT パッケージ メソッドを操作するときに発生し、null 値が任意のメソッドに渡されます。 このチュートリアルでは、Java でこの NullPointerException を解決する方法を示します。

Java でのスレッド "AWT-EventQueue-0" java.lang.NullPointerException での例外

"AWT-EventQueue-0" java.lang.NullPointerException は、AWT パッケージに null 値を渡すと発生します。 NullPointerException 例外は、Java で最も一般的な例外です。

NullPointerException は、次のいずれかの条件が満たされた場合に発生します。

  1. null オブジェクト フィールドにアクセスして変更する場合。
  2. null オブジェクトからメソッドを呼び出すとき。
  3. null オブジェクトのスロットにアクセスして変更する場合。
  4. null 配列の長さを取得する場合。
  5. null オブジェクトを同期しようとしたとき。
  6. null 値をスローする場合。

Java で "AWT-EventQueue-0" java.lang.NullPointerException をスローする例を試してみましょう。

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

上記のコードは、牛が立っている単純なゲームに関するもので、牛はボタンを押すと動き始めます。 AWT メソッド new ImageIcon(getClass().getResource()) が null エントリを取得しているため、"AWT-EventQueue-0" java.lang.NullPointerException がスローされます。

このコードの出力は次のとおりです。

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

この問題は、画像をクラス フォルダー パスに移動することで解決できます。 Windows は Java のパスに \\ を使用するため、/ を削除することもできます。

それでもうまくいかない場合は、画像へのフル パスを指定できます。 上記のコードでは、詳細な説明がコメントアウトされています。