Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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 加载和显示图像时命令提示出错_Java_Swing_Nullpointerexception - Fatal编程技术网

Java 加载和显示图像时命令提示出错

Java 加载和显示图像时命令提示出错,java,swing,nullpointerexception,Java,Swing,Nullpointerexception,我正在开发我的第一个Java应用程序,一个游戏。 我现在编译的东西很好,但当我在命令提示符下运行它时,命令提示符会反复打印: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at Spike.loadpic(Spike.java:50) at Spike.paintspi

我正在开发我的第一个Java应用程序,一个游戏。 我现在编译的东西很好,但当我在命令提示符下运行它时,命令提示符会反复打印:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException                   
at Spike.loadpic(Spike.java:50)                                                 
at Spike.paintspike(Spike.java:55)                                              
at Move.paint(Move.java:106)                                                    
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5217)                
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1532)                                                                        
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1455)                                                                                      
at javax.swing.RepaintManager.paint(RepaintManager.java:1252)                   
at javax.swing.JComponent._paintImmediately(JComponent.java:5165)               
at javax.swing.JComponent.paintImmediately(JComponent.java:4976)                
at javax.swing.RepaintManager$3.run(RepaintManager.java:811)                    
at javax.swing.RepaintManager$3.run(RepaintManager.java:794)                    
at java.security.AccessController.doPrivileged(Native Method)                   
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)                                                                           
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:794)                                                                                        
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:769)                                                                                        
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718)                                                                                     
at javax.swing.RepaintManager.access$1100(RepaintManager.java:62)               
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1680)                                                                                  
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)            
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)                   
at java.awt.EventQueue.access$400(EventQueue.java:97)                           
at java.awt.EventQueue$3.run(EventQueue.java:697)                               
at java.awt.EventQueue$3.run(EventQueue.java:691)                               
at java.security.AccessController.doPrivileged(Native Method)                   
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)                                                                           
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)                       
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)                                                                            
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)                                                                               
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)                                                                            
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)                                                                                        
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)         
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)        
而且它不会启动应用程序(当我少加载一个图像时,它最终会停止工作)

以下是我认为可能导致问题的代码部分:

        @SuppressWarnings("serial")
        public class Move extends JPanel implements Runnable {
        private synchronized void start(){
        if(running){
            return;
        }
        running = true;
        thread = new Thread(this);
        thread.start(); 
    }

    public void run(){
        private Thread thread;
        boolean running = false;
        long tijd = System.nanoTime();
        double ticks = 60.0;
        double ns = 1000000000/ticks;
        double delta=0;
        while(running){
            long tijd2 = System.nanoTime();
            delta+=(tijd2-tijd)/ns;
            tijd=tijd2;
            if(delta>1){
            player.move();
            for(int i=0;i<zappelin.length;i++){
            zappelin[i].movezappelin();
            }
            repaint();
            delta--;
                }
            }
        }
        @Override
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D) g;

        if(player.x<400){g2d.translate(0,0);}
        else if(player.x+400>levellength){g2d.translate(-levellength+800,0);}
        else{g2d.translate(-(player.x-400),0);}
        player.paintplayer(g2d);
        for(int i=0;i<ground.length;i++){
            ground[i].paintground(g2d);
        }
        for(int j=0;j<spike.length;j++){
            spike[j].paintspike(g2d);
        }
        for(int k=0;k<zappelin.length;k++){
            zappelin[k].paintzappelin(g2d);
        }
    }
        public static void main(String[] args){
        /*Set frame, create Move game, etc */
        game.start();
    }
        /*Some other stuff*/
        }

public class Player{
loaded=false;      
private void loadpic(){
        player[0] = new ImageIcon("Images/Playa.png").getImage();
        player[1] = new ImageIcon("Images/Playal.png").getImage();
        player[2] = new ImageIcon("Images/Playar.png").getImage();      
        loaded = true;
        game.repaint();
    }

public void paintplayer(Graphics2D g){
    if(!loaded){
        loadpic();
    }
     if(loaded){
        if(xa==-1){
            g.drawImage(player[1], x, y, null);
        }
        else if(xa==1){
            g.drawImage(player[2], x, y, null);
        }
        else{
        g.drawImage(player[0], x, y, null);
        }
     }
}
/*Other stuff*/
}

public class Zappelin{
private void loadpic(){
        zappelin[0] = new ImageIcon("Images/zappelinl.png").getImage();
        zappelin[1] = new ImageIcon("Images/zappelinr.png").getImage();
        zappelin[2] = new ImageIcon("Images/explosion.png").getImage();
        loaded = true;
        game.repaint();
    }
  public void paintzappelin(Graphics2D g) {
        if(dead){return;}
        if(!loaded){
            loadpic();
        }
        else{
            if(xaz==-1||xaz==0){g.drawImage(zappelin[0], xz, yz, null);}
            else{g.drawImage(zappelin[1],xz,yz,null);
                //g.drawImage(zappelin[2], 10,10, 64, 64, 0,0,64,64,null);
            }
        }
        if(bullet){
            g.setColor(Color.RED);
            g.fillOval(xbullet,ybullet,4,4);
        }
    }
/*Other stuff*/
}

public class Spike{
private void loadpic(){
        switch (dimension){
        case "normaal":     
            spike = new ImageIcon("Images/Spike.png").getImage();
            test=1337;
            break;

        case "links": 
            spike = new ImageIcon("Images/spikel.png").getImage();
            break;

        case "rechts": 
            spike = new ImageIcon("Images/spiker.png").getImage();
            break;

        case "boven": 
            spike = new ImageIcon("Images/spikeb.png").getImage();
            break;

        default: 
            spike = new ImageIcon("Images/Spike.png").getImage();
            break;
            }

        loaded = true;
        game.repaint(); 
    }
public void paintspike(Graphics2D g) {
        if(!loaded){
            loadpic();
        }
        else{
            if(dimension=="normaal"||dimension=="boven"){
                for(int i=0; i<amount;i++){
                    g.drawImage(spike, xg+15*i, yg, null);}
                }
            if(dimension=="links"||dimension=="rechts"){
                for(int i=0; i<amount;i++){
                    g.drawImage(spike, xg, yg+20*i, null);
                }
            }
        }
    }
}
@SuppressWarnings(“串行”)
公共类移动扩展JPanel实现可运行{
私有同步的void start(){
如果(正在运行){
返回;
}
运行=真;
线程=新线程(此);
thread.start();
}
公开募捐{
私有线程;
布尔运行=假;
long tijd=System.nanoTime();
双刻度=60.0;
双纳秒=100000000/滴答;
双增量=0;
(跑步时){
long tijd2=System.nanoTime();
delta+=(tijd2 tijd)/ns;
tijd=tijd2;
如果(增量>1){
player.move();
对于(int i=0;i您的paint()-方法中有一个NPE(NullPointerException)。这意味着您使用了一个未初始化的变量(它只是null)。因为您的代码不完整,我们不知道第50行在哪里,所以我无法告诉您问题的确切位置


另一个注意事项:从线程内部调用JPanel的重绘方法是不好的做法。Swing不是线程安全的。您需要使用
SwingUtilities.invokeAndWait(runnable)
SwingUtilities.invokeLater(runnable)

检查Spike.java文件中的第50行。您有一个空指针异常。(1)-(2)
Images
文件夹是否在“工作目录”中?如果不是,则您的图像将为空“这意味着您使用了未初始化的变量”不一定为真。图像可能为空。尝试
g.drawImage(空,…)
将导致NPEYes-您完全正确。但是,请注意,异常应指向另一个堆栈中的此调用。