这是我的代码:如果您需要,还有一个JPanel
,但我几乎可以确定JPanel
是有效的。我遇到的问题是我的JPanel
没有出现在JFrame
上。非常感谢你的帮助。
package projectz;
import java.awt.Component;
import javax.swing.*;
import java.awt.event.*;
public class ProjectZ extends JFrame implements ActionListener, KeyListener {
int scale = 2;
int playerx = 0;
int playery = 0;
Backround back;
JLayeredPane pane;
public ProjectZ(){
super("This game");
setSize(250 * scale, 250 * scale);
setFocusable(true);
setFocusTraversalKeysEnabled(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
back = new Backround(playerx, playery);
Component add;
add = pane.add(back);
}
@Override
public void actionPerformed(ActionEvent ae) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void keyTyped(KeyEvent ke) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void keyPressed(KeyEvent ke) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void keyReleased(KeyEvent ke) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
public static void main(String[] args){
ProjectZ z;
z = new ProjectZ();
}
}
答案 0 :(得分:2)
首先(尽管这不是您的具体问题),您将在主线程上实例化您的JFrame。当您开始实施动作事件时,这将成为一个问题。请ProjectZ
实施Runnable
,然后在主要方法中使用EventQueue.invokeLater(...)
来设置它。这将确保您在EWT上运行用户界面而不是主线程,并且它将保持响应。
关于你的实际问题,如果没有来自NullPointerException
的堆栈跟踪很难判断(这个会告诉你具体的指针是什么,因此在哪里问题是),但是看到组件,如果你{/ 1}} 之后你添加了组件,它将使那时的组件层次结构失效(然后重新验证)然后应该绘制您的setVisible(true)
Background
组件。
修改强>
其他人正确地指出所使用的JPanel
对象从未被实例化。你的堆栈跟踪也会告诉你这个。
答案 1 :(得分:2)
你没有初始化pane
。当你写add = pane.add(back);
pane
为空时,这就是你获得NullPointerException
的原因。
答案 2 :(得分:2)
除了@ Smalltown2k提出的问题:
您尚未初始化pane
因此,当您致电pane.add(back)
时,pane
为null
,您就会获得NPE。