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이 발생합니다.
null개체 필드에 액세스하고 수정할 때.null개체에서 메서드를 호출할 때.null개체의 슬롯에 액세스하고 수정할 때.null배열의 길이를 취하는 경우.null개체를 통해 동기화를 시도할 때.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의 경로로 \\를 사용하므로 /를 제거할 수도 있습니다.
여전히 작동하지 않는 경우 이미지의 전체 경로를 제공할 수 있습니다. 추가 설명은 위의 코드에서 주석 처리됩니다.