Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java (SafeIcon)为什么(icon.getIconWidth();返回空值?_Java_Jframe_Icons_Bufferedimage - Fatal编程技术网

Java (SafeIcon)为什么(icon.getIconWidth();返回空值?

Java (SafeIcon)为什么(icon.getIconWidth();返回空值?,java,jframe,icons,bufferedimage,Java,Jframe,Icons,Bufferedimage,我正在编写一个游戏,我现在正在做的是,玩家轮换没有成功。下面是错误消息: Exception in thread "Thread-2" java.lang.NullPointerException at Schoo.NewGame.SafeIcon.getIconWidth(SafeIcon.java:29) at Schoo.NewGame.TheRealGame.turn(TheRealGame.java:412) at Schoo.NewGame.TheRealGame.turnPlaye

我正在编写一个游戏,我现在正在做的是,玩家轮换没有成功。下面是错误消息:

Exception in thread "Thread-2" java.lang.NullPointerException
at Schoo.NewGame.SafeIcon.getIconWidth(SafeIcon.java:29)
at Schoo.NewGame.TheRealGame.turn(TheRealGame.java:412)
at Schoo.NewGame.TheRealGame.turnPlayer(TheRealGame.java:427)
at Schoo.NewGame.TheRealGame.RepaintPlayer(TheRealGame.java:377)
at Schoo.NewGame.TheRealGame$2.run(TheRealGame.java:225)
at java.lang.Thread.run(Unknown Source)
安全图标中的第29行:

return wrappee.getIconHeight();
更多信息:

private Icon wrappee;
    private Icon standIn;

    public SafeIcon(Icon icon) {
        wrappee = icon;
    }

    @Override
    public int getIconHeight() {
        return wrappee.getIconHeight();
    }

    @Override
    public int getIconWidth() {
        return wrappee.getIconWidth();
    }
Icon icon;
public void turn(Direction d){
    if (pt == Playere.Kaneki){
        icon = new SafeIcon(playerImage.getIcon());
        BufferedImage bi = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_RGB);
        Graphics2D g = (Graphics2D) bi.getGraphics();
        if (d == Direction.LEFT && p.getDirection() == Direction.UP){
            g.rotate(Math.PI / 2, playerImage.getWidth(), playerImage.getHeight());
            playerImage.getIcon().paintIcon(null, g, 0, 0);
            g.dispose();
        }
    }
    if (pt == Playere.Touka){

    }
}
Theralgame中的第412行:

BufferedImage bi = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_RGB);
更多信息:

private Icon wrappee;
    private Icon standIn;

    public SafeIcon(Icon icon) {
        wrappee = icon;
    }

    @Override
    public int getIconHeight() {
        return wrappee.getIconHeight();
    }

    @Override
    public int getIconWidth() {
        return wrappee.getIconWidth();
    }
Icon icon;
public void turn(Direction d){
    if (pt == Playere.Kaneki){
        icon = new SafeIcon(playerImage.getIcon());
        BufferedImage bi = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_RGB);
        Graphics2D g = (Graphics2D) bi.getGraphics();
        if (d == Direction.LEFT && p.getDirection() == Direction.UP){
            g.rotate(Math.PI / 2, playerImage.getWidth(), playerImage.getHeight());
            playerImage.getIcon().paintIcon(null, g, 0, 0);
            g.dispose();
        }
    }
    if (pt == Playere.Touka){

    }
}
这就是我发现的地方。 如果你需要我的整个主要课程:

public class TheRealGame{

private static Bullets b = new Bullets();
private static boolean running = false;
private static boolean paused = false;
private static boolean right = false, left = false, up = false, down = false;
private static JFrame f;
private static ArrayList<JLabel> ae = new ArrayList<JLabel>();
private static Player p;
private static Playere pt;
private static JLabel playerImage;
private static Icon playerIcon;
private static ImageIcon imageIcon;
private static boolean attacking = false;
private static boolean info = false;
private static JLabel iy, ix, im, in, iu;
private static Enemys enemys = new Enemys();
private static ArrayList<JLabel> bullets = new ArrayList<JLabel>();

public static void main(Playere playertype){
    pt = playertype;
    p = new Player(pt);
    f = new JFrame();
    f.setVisible(true);
    f.setSize(700, 700);
    f.setResizable(false);
    f.setLocationRelativeTo(null);
    f.addKeyListener(new KeyListener(){
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_UP || e.getKeyChar() == KeyEvent.VK_W){
                up = true;
            }
            if (e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyChar() == KeyEvent.VK_A){
                left = true;
            }
            if (e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyChar() == KeyEvent.VK_S){
                down = true;
            }
            if (e.getKeyCode() == KeyEvent.VK_RIGHT || e.getKeyChar() == KeyEvent.VK_D){
                right = true;
            }
            if (e.getKeyCode() == KeyEvent.VK_SPACE || e.getKeyCode() == KeyEvent.VK_ENTER){
                if (attacking == false){
                    p.attack();
                }
            }
            if (e.getKeyCode() == KeyEvent.VK_F3){
                if (info == true){
                    info = false;
                    iy.setVisible(false);
                    ix.setVisible(false);
                    im.setVisible(false);
                    in.setVisible(false);
                    iu.setVisible(false);
                }else if (info == false){
                    info = true;
                    iy.setVisible(true);
                    ix.setVisible(true);
                    im.setVisible(true);
                    in.setVisible(true);
                    iu.setVisible(true);
                }
            }
        }

        @Override
        public void keyReleased(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_UP || e.getKeyChar() == KeyEvent.VK_W){
                up = false;
            }
            if (e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyChar() == KeyEvent.VK_A){
                left = false;
            }
            if (e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyChar() == KeyEvent.VK_S){
                down = false;
            }
            if (e.getKeyCode() == KeyEvent.VK_RIGHT || e.getKeyChar() == KeyEvent.VK_D){
                right = false;
            }
            if (e.getKeyCode() == KeyEvent.VK_SPACE || e.getKeyCode() == KeyEvent.VK_ENTER){
                if (attacking == true)
                    p.attack();
            }
        }

        @Override
        public void keyTyped(KeyEvent e) {

        }
    });
    playerImage = new JLabel();
    iy = new JLabel();
    ix = new JLabel();
    im = new JLabel();
    in = new JLabel();
    iu = new JLabel();
    iy.setLocation(0, 10);
    ix.setLocation(0, 20);
    im.setLocation(0, 30);
    in.setLocation(0, 40);
    iu.setLocation(0, 50);
    iy.setBounds((int) iy.getLocation().getX(), (int) iy.getLocation().getY(), 100, 15);
    ix.setBounds((int) ix.getLocation().getX(), (int) ix.getLocation().getY(), 100, 15);
    im.setBounds((int) im.getLocation().getX(), (int) im.getLocation().getY(), 100, 15);
    in.setBounds((int) in.getLocation().getX(), (int) in.getLocation().getY(), 100, 15);
    iu.setBounds((int) iu.getLocation().getX(), (int) iu.getLocation().getY(), 300, 15);
    f.add(ix);
    f.add(iy);
    f.add(im);
    f.add(in);
    f.add(iu);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setTitle("free play - tokyo ghoul");
    Start();
    p.Paint();
}
public static void resume(){
    if (paused == false){
        return;
    }
}
public static void pause(){
    if (paused == true){
        return;
    }
}
public static void Stop(){
    if (running == false){
        return;
    }
    running = false;
}
public static void move(JLabel l, int newX, int newY){
    l.setLocation(newX, newY);
    l.repaint();
    f.repaint();
}

public static void remove(JLabel l){
    f.remove(l);
    l.setVisible(false);
}

public static JLabel getPlayerImage(){
    return playerImage;
}

public static Player getPlayer(){
    return p;
}

public static void Start(){
    running = true;

    new Thread(new Runnable(){
        @Override
        public void run() {
            int last = 0, u = 0;
            while (running == true){
                if (paused != true){
                    if (up == true){
                        p.move(p.getX(), p.getY()-1);
                        if (p.getDirection() != Direction.UP)
                            turnPlayer(Direction.UP);
                    }
                    if (down == true){
                        p.move(p.getX(), p.getY()+1);
                        if (p.getDirection() != Direction.DOWN)
                            turnPlayer(Direction.DOWN);
                    }
                    if (left == true){
                        p.move(p.getX()-1, p.getY());
                        if (p.getDirection() != Direction.LEFT)
                            turnPlayer(Direction.LEFT);
                    }
                    if (right == true){
                        p.move(p.getX()+1, p.getY());
                        if (p.getDirection() != Direction.RIGHT)
                            turnPlayer(Direction.RIGHT);
                    }
                    if (info == true){
                        int l = 10-last;
                        iy.setText("y: "+p.getY());
                        ix.setText("x: "+p.getX());
                        im.setText("enemys: "+ae.size());
                        in.setText("next enemy: "+l);
                        iu.setText("Updated "+u+" times.");
                        RefreshInfo();
                    }
                    if (p.getY() >= +334){
                        p.move(p.getX(), +334);
                    }
                    if (p.getY() <= -334){
                        p.move(p.getX(), -334);
                    }
                    if (p.getX() >= 675){
                        p.move(675, p.getY());
                    }
                    if (p.getX() <= -12){
                        p.move(-12, p.getY());
                    }
                    RepaintAllEnemys();
                    Enemy.UpdateAll();
                    playerImage.repaint();
                    RepaintPlayer();
                    enemys.Update();
                    b.Update();
                    f.repaint();
                    if (info != true){
                        f.repaint();
                    }
                    if (last == 10){
                        Random r = new Random();
                        int x = 1+r.nextInt(2), y = 1+r.nextInt(2), distance = 1+r.nextInt(570), nx = 0, ny = 0;
                        if (x == 1){

                        }
                        last = 0;
                    }
                    last++;
                    u++;
                }
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }).start();
}

public static void RefreshInfo(){
    f.remove(iy);
    f.remove(ix);
    f.remove(im);
    f.remove(in);
    f.remove(iu);
    f.add(ix);
    f.add(iy);
    f.add(im);
    f.add(in);
    f.add(iu);
    iy.setLocation(0, 10);
    ix.setLocation(0, 20);
    im.setLocation(0, 30);
    in.setLocation(0, 40);
    iu.setLocation(0, 50);
    iu.setBounds((int) iu.getLocation().getX(), (int) iu.getLocation().getY(), 200, 15);
    iy.setBounds((int) iy.getLocation().getX(), (int) iy.getLocation().getY(), 100, 15);
    ix.setBounds((int) ix.getLocation().getX(), (int) ix.getLocation().getY(), 100, 15);
    im.setBounds((int) im.getLocation().getX(), (int) im.getLocation().getY(), 100, 15);
    in.setBounds((int) in.getLocation().getX(), (int) in.getLocation().getY(), 100, 15);
    f.repaint();
}

public static void UpdateAll(){

}

public static void Paint(JLabel imgs, int x, int y, Icon file){
    Icon img = file;
    imgs.setIcon(img);
    imgs.setBounds(x, y, img.getIconWidth(), img.getIconHeight());
    imgs.setLocation(x, y);
    imgs.setVisible(true);
    f.add(imgs);
    imgs.setVisible(true);
}

public static void addBullet(JLabel l, int x, int y, Icon icon){
    Paint(l, x, y, icon);
    bullets.add(l);
}

public static void moveBullet(int newX, int newY, JLabel label){
    if (bullets.contains(label)){
        label.setLocation(newX, newY);
        label.repaint();
        f.repaint();
        label.setVisible(true);
    }
}

public static void Repaint(JLabel l){
    f.remove(l);
    l.setBounds((int)l.getLocation().getX(), (int)l.getLocation().getY(), l.getWidth(), l.getHeight());
    f.add(l);
}

public static void addAE(JLabel l){
    ae.add(l);
}

public static void RepaintAllEnemys(){
    for (int i = 0; i < ae.size(); i++){
        ae.get(i).repaint();
    }
}

public static void MovePlayer(int x, int y){
    playerImage.setLocation(x, y);
    playerImage.repaint();
    f.repaint();
}

public static void paint(JLabel l, int Y, int X){
    l.setLocation(X, Y);
    l.setBounds(X, Y, l.getIcon().getIconWidth(), l.getIcon().getIconHeight());
    l.setVisible(true);
    f.add(l);
    l.setVisible(true);
    l.repaint();
    f.repaint();
}

public static void RepaintPlayer(){
    if (p.isAttacking() == true){
        if (pt == Playere.Kaneki){
            if (attacking == false){
                ImageIcon img = new ImageIcon(StartMenu.class.getResource("/Schoo/NewGame/Kaneki_hit.png"));
                playerImage.setIcon(img);
                playerIcon = img;
                attacking = true;
                imageIcon = img;
            }
        }
        if (pt == Playere.Touka){
            if (attacking == false){
                ImageIcon img = new ImageIcon(StartMenu.class.getResource("/Schoo/NewGame/touka_shoot.png"));
                playerImage.setIcon(img);
                playerIcon = img;
                attacking = true;
                imageIcon = img;
            }
        }
    }else{
        if (pt == Playere.Kaneki){
            if (attacking == true){
                ImageIcon img = new ImageIcon(StartMenu.class.getResource("/Schoo/NewGame/Kaneki_walk.png"));
                playerImage.setIcon(img);
                playerIcon = img;
                attacking = false;
                imageIcon = img;
            }
        }
        if (pt == Playere.Touka){
            if (attacking == true){
                ImageIcon img = new ImageIcon(StartMenu.class.getResource("/Schoo/NewGame/touka_walk.png"));
                playerImage.setIcon(img);
                playerIcon = img;
                attacking = false;
                imageIcon = img;
            }
        }
    }
    turnPlayer(p.getDirection());
    MovePlayer(p.getX(), p.getY());
    playerImage.repaint();
    f.repaint();
}

public static void paintplayer(){
    if (pt == Playere.Kaneki){
        ImageIcon imgs = new ImageIcon(StartMenu.class.getResource("/schoo/NewGame/kaneki_walk.png"));
        playerImage.setIcon(imgs);
        playerImage.setBounds(p.getX(), p.getY(), imgs.getIconWidth(), imgs.getIconHeight());
        playerImage.setLocation(274, 277);
        playerImage.setVisible(true);
        f.add(playerImage);
        playerImage.setVisible(true);
        imageIcon = imgs;
    }
    if (pt == Playere.Touka){
        playerImage.setIcon(new ImageIcon(StartMenu.class.getResource("/schoo/NewGame/touka_walk.png")));
        playerImage.setBounds(p.getX(), p.getY(), new ImageIcon(StartMenu.class.getResource("/schoo/NewGame/touka_walk.png")).getIconWidth(), new ImageIcon(StartMenu.class.getResource("/schoo/NewGame/touka_walk.png")).getIconHeight());
        playerImage.setLocation(274, 277);
        playerImage.setVisible(true);
        f.add(playerImage);
        playerImage.setVisible(true);
        playerIcon = playerImage.getIcon();
    }
}

public static Bullets getBullets(){
    return b;
}
Icon icon;
public void turn(Direction d){
    if (pt == Playere.Kaneki){
        icon = new SafeIcon(playerImage.getIcon());
        BufferedImage bi = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_RGB);
        Graphics2D g = (Graphics2D) bi.getGraphics();
        if (d == Direction.LEFT && p.getDirection() == Direction.UP){
            g.rotate(Math.PI / 2, playerImage.getWidth(), playerImage.getHeight());
            playerImage.getIcon().paintIcon(null, g, 0, 0);
            g.dispose();
        }
    }
    if (pt == Playere.Touka){

    }
}

public static void turnPlayer(Direction d){
    try {
        TheRealGame.class.newInstance().turn(d);
    } catch (InstantiationException e) {
        System.out.println("Something went wrong!");
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        System.out.println("Something went wrong!");
        e.printStackTrace();
    }
}

public enum Direction{
    LEFT, UP, RIGHT, DOWN;
}
}
公共类{
私有静态项目符号b=新项目符号();
私有静态布尔运行=false;
私有静态布尔值=false;
私有静态布尔值right=false,left=false,up=false,down=false;
私有静态jf帧;
私有静态ArrayList ae=新ArrayList();
私有静态播放器p;
私人静态播放器;
私有静态JLabel playerImage;
私人静态图标播放器;
私有静态图像图标;
私有静态布尔攻击=false;
私有静态布尔信息=false;
专用静态JLabel iy、ix、im、in、iu;
私有静态Enemys Enemys=新Enemys();
私有静态ArrayList项目符号=新建ArrayList();
公共静态void main(PlayerPlayerType){
pt=播放类型;
p=新玩家(pt);
f=新的JFrame();
f、 setVisible(真);
f、 设置大小(700700);
f、 可设置大小(假);
f、 setLocationRelativeTo(空);
f、 addKeyListener(新的KeyListener(){
@凌驾
按下公共无效键(按键事件e){
如果(e.getKeyCode()==KeyEvent.VK_向上| | e.getKeyChar()==KeyEvent.VK_W){
向上=真;
}
如果(e.getKeyCode()==KeyEvent.VK_LEFT | | e.getKeyChar()==KeyEvent.VK_A){
左=真;
}
如果(e.getKeyCode()==KeyEvent.VK|u DOWN | e.getKeyChar()==KeyEvent.VK|S){
向下=真;
}
如果(e.getKeyCode()==KeyEvent.VK_RIGHT | | e.getKeyChar()==KeyEvent.VK_D){
右=真;
}
如果(e.getKeyCode()==KeyEvent.VK_SPACE | | e.getKeyCode()==KeyEvent.VK_ENTER){
如果(攻击==错误){
p、 攻击();
}
}
如果(例如getKeyCode()==KeyEvent.VK_F3){
如果(信息==真){
信息=假;
iy.setVisible(假);
ix.setVisible(假);
im.setVisible(false);
in.setVisible(false);
iu.setVisible(假);
}否则如果(信息==false){
信息=真;
iy.setVisible(真);
ix.setVisible(真);
im.setVisible(真);
in.setVisible(true);
iu.setVisible(真);
}
}
}
@凌驾
公共无效密钥已释放(密钥事件e){
如果(e.getKeyCode()==KeyEvent.VK_向上| | e.getKeyChar()==KeyEvent.VK_W){
向上=错误;
}
如果(e.getKeyCode()==KeyEvent.VK_LEFT | | e.getKeyChar()==KeyEvent.VK_A){
左=假;
}
如果(e.getKeyCode()==KeyEvent.VK|u DOWN | e.getKeyChar()==KeyEvent.VK|S){
向下=假;
}
如果(e.getKeyCode()==KeyEvent.VK_RIGHT | | e.getKeyChar()==KeyEvent.VK_D){
右=假;
}
如果(e.getKeyCode()==KeyEvent.VK_SPACE | | e.getKeyCode()==KeyEvent.VK_ENTER){
如果(攻击==真)
p、 攻击();
}
}
@凌驾
public void keyTyped(KeyEvent e){
}
});
playerImage=新JLabel();
iy=新的JLabel();
ix=新的JLabel();
im=新的JLabel();
in=新的JLabel();
iu=新的JLabel();
iy.设置位置(0,10);
ix.设定位置(0,20);
im.设置位置(0,30);
in.设置位置(0,40);
iu.设定位置(0,50);
设置边界((int)iy.getLocation().getX(),(int)iy.getLocation().getY(),100,15);
ix.setBounds((int)ix.getLocation().getX(),(int)ix.getLocation().getY(),100,15);
im.setBounds((int)im.getLocation().getX(),(int)im.getLocation().getY(),100,15);
in.setBounds((int)in.getLocation().getX(),(int)in.getLocation().getY(),100,15);
iu.setBounds((int)iu.getLocation().getX(),(int)iu.getLocation().getY(),300,15);
f、 添加(ix);
f、 添加(iy);
f、 添加(im);
f、 添加(in);
f、 添加(iu);
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f、 片名(“自由游戏-东京食尸鬼”);
Start();
p、 油漆();
}
公共静态无效恢复(){
如果(暂停==false){
返回;
}
}
公共静态无效暂停(){
如果(暂停==真){
返回;
}
}
公共静态无效停止(){
if(running==false){
返回;
}
运行=错误;
}
公共静态无效移动(JLabel、int-newX、int-newY){
l、 设置位置(newX,newY);
l、 重新油漆();
f、 重新油漆();
}
公共静态无效删除(JLabel){
f、 移除(l);
l、 setVisible(假);
}
公共静态JLabel getPlayerImage(){
返回playerImage;
}
公共静态播放器getPlayer(){
返回p;
}
公共静态void Start(){
运行=真;
新线程(newrunnable()){
@凌驾
公开募捐{
int last=0,u=0;
while(running==true){
如果(暂停!=真){
如果(向上==真){
p、 move(p.getX(),p.getY()-1);
if(p.getDirection()!=Direction.UP)
turnPlayer(方向向上);
}
如果(向下==真){
p、 移动(p.getX(),p.getY()+1);
if(p.getDirection()!=方向向下)
唱机(方向向下);
}
如果(左==真){
p、 move(p.getX()-1,p.getY());
if(p.getDirection()!=Direction.LEFT)
旋转播放器(方向左);