我遇到空指针异常和JFrames的问题

时间:2014-03-08 12:34:22

标签: java swing nullpointerexception jframe

这是我的代码:如果您需要,还有一个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();
    }

}

3 个答案:

答案 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)时,panenull,您就会获得NPE。