所以我遇到的問題與我的JFrame有關。首先,我要在這裏發佈我的代碼,然後解釋這個問題。給出空指針的Java JFrame代碼異常
package evenMoreTesting;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
public class MyKeyBindings {
static int x1=0,x2=0,x3=0;
static JFrame frame;
public static void main(String[] args) {
//JFrame frame = new JFrame();
//some kind of problem when im calling JFrame out of the main class
frame.setTitle("we still testing");
frame.setSize(750, 500);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
Action a1 = new AbstractAction() {
public void actionPerformed(ActionEvent AE){
x1 +=1;
Action a2 = new AbstractAction() {
public void actionPerformed(ActionEvent AE){
x2 +=1;
Action a3 = new AbstractAction() {
public void actionPerformed(ActionEvent AE){
x3 +=1;
if(x3==1){
System.out.println("you wot");
}
if(x3==2){
System.out.println("m8");
}
}
};
if(x2==1){
System.out.println("dude");
}
if(x2==2){
System.out.println("stop");
}
if(x1==3 && x2==4){
System.out.println("woah you broke the goddamn system");
}
//this game will be sensitive to how many clicks have happened
//and it doesnt work unless i call the above code in this action
//the a3 action will be in here just like a2 is in a1
JPanel content = (JPanel) frame.getContentPane();
KeyStroke three = KeyStroke.getKeyStroke("3");
InputMap IM = content.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
IM.put(three, "x3++");
content.getActionMap().put("x3++", a3);
}
};
JPanel content = (JPanel) frame.getContentPane();
KeyStroke two = KeyStroke.getKeyStroke("2");
InputMap IM = content.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
IM.put(two, "x2++");
content.getActionMap().put("x2++",a2);
if(x1==1){
System.out.println("ok");
}
if(x1==2){
System.out.println("cool");
}
}
};
JPanel content = (JPanel) frame.getContentPane();
KeyStroke one = KeyStroke.getKeyStroke("1");
InputMap IM = content.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
IM.put(one, "x1++");
content.getActionMap().put("x1++", a1);
}
}
所以問題是,當我打電話的主要方法外JFrame中我得到這個錯誤:在evenMoreTesting.MyKeyBindings.main(MyKeyBindings螺紋
異常「主」顯示java.lang.NullPointerException 的.java:27)
第27行是這樣的:
frame.setTitle("we still testing");
而實際上前幾天這個問題是不是在這裏,我不知道怎麼異常現在就開始了。
我決定評論一下,看看這是否是唯一的問題。我做了,但仍然有錯誤,但是這次是在第28行,所以我將第28行註釋掉,然後錯誤發生在第29行,而其餘的代碼都是在框架中發生的。
現在你可以說,只需將JFrame放在主要方法中,但是有一個原因需要超出主要方法。
在我的行動裏面我將調用JFrame把圖像放在屏幕上。當JFrame處於主要方法中時,它僅限於該方法,從我所知道的方面來看。
所以我決定在主外面調用JFrame,這樣它也可以訪問這些動作。這就是我將如何將圖像調用到屏幕上,對於任何感興趣的人或者它是否有助於解決這個問題。
frame.add(new JLabel(new ImageIcon("frames/img01.jpg")));
框架是源文件夾和IMG01是我第一次圖像屏幕
上如果有接近繪製圖像在屏幕上的另一種方式,請告知。
總之我的問題是,爲什麼我在調用主方法之外的JFrame時收到空指針異常,以及如何防止它。
預先感謝您!
你'靜態的JFrame幀;'是由默認'null',你在'main'方法中做的第一個動作是'frame.setTitle',這意味着你是invok 'null'上的'setTitle'(並且null沒有這樣的方法,或者任何方法都更精確)。首先初始化'frame'。你可以聲明它爲'static JFrame frame = new JFrame();'或者在你的main方法中調用frame = new JFrame();'。 – Pshemo
感謝解釋它是如何工作的! –