Мой код выдает это исключение, и я не знаю, как его исправить
import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.image.BufferStrategy; import javax.swing.JFrame; import java.util.ArrayList; import java.util.Random; import java.awt.image.BufferedImage; import java.io.FileInputStream; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JOptionPane; public class game extends Canvas implements Runnable,KeyListener { public static final int WIDTH=640,HEIGHT=480; boolean running=false; private Thread thread; public Room room; public Bird bird; public game() { Dimension d=new Dimension(game.WIDTH,game.HEIGHT); setPreferredSize(d); addKeyListener(this); setFocusable(true); setFocusTraversalKeysEnabled(false); room=new Room(80); bird=new Bird(20,game.HEIGHT/2,room.tubes); } public synchronized void start() { if(running) return; running = true; thread = new Thread(this); thread.start(); } public synchronized void stop() { if(!running) return; running =false; try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } } public static void main(String[] args) { JFrame frame=new JFrame("flappy bird"); game Game = new game(); frame.add(Game); frame.pack(); frame.setVisible(true); frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setResizable(false); Game.start(); } @Override public void run() { int fps=0; long LastTime=System.nanoTime(); double Timer=System.currentTimeMillis(); double ns=1000000000/60; double delta=0; while(running) { long now=System.nanoTime(); delta+= (now -LastTime) / ns; LastTime=now; while(delta >= 1) { update(); render(); fps++; delta--; } if(System.currentTimeMillis() - Timer>=1000) { System.out.println("FPS: "+fps); fps=0; Timer+=1000; } } stop(); } private void render() { BufferStrategy bf=getBufferStrategy(); if(bf==null) { createBufferStrategy(3); return; } Graphics g=bf.getDrawGraphics(); g.setColor(Color.CYAN.darker().darker()); g.fillRect(0, 0, game.WIDTH, game.HEIGHT); room.render(g); bird.render(g); g.dispose(); bf.show(); } private void update() { room.update(); bird.update(); } @Override public void keyPressed(KeyEvent e) { int c=e.getKeyCode(); if(c==KeyEvent.VK_SPACE) { bird.isPressed=true; } } @Override public void keyReleased(KeyEvent e) { bird.isPressed=false; } @Override public void keyTyped(KeyEvent arg0) {} } public class Room { public ArrayList<Rectangle> tubes; private int time=0; private int currentTime=0; private int spd=3; private final int SPACE_TUBE=95; private final int WIDTH_TUBES=40 ; Random rand; public Room(int time) { tubes=new ArrayList<>(); this.time=time; rand=new Random(); } public void update() { currentTime++; if(currentTime==time) { currentTime=0; int height1=rand.nextInt(game.HEIGHT/2); int y2=height1+SPACE_TUBE; int height2=game.HEIGHT-y2; tubes.add(new Rectangle(game.WIDTH,0,WIDTH_TUBES,height1)); tubes.add(new Rectangle(game.WIDTH,y2,WIDTH_TUBES,height2)); } for(int i=0;i<tubes.size();i++) { Rectangle rect=tubes.get(i); rect.x-=spd; if(rect.width+rect.x<=0) { tubes.remove(i--); continue; } } } public void render(Graphics g) { g.setColor(new Color(43, 216, 57)); for(int i=0;i<tubes.size();i++) { Rectangle rect=tubes.get(i); g.fillRect(rect.x, rect.y,rect.width, rect.height); } } } public class Bird extends Rectangle { private int spd=3; public boolean isPressed=false; private BufferedImage sheet; private BufferedImage[] texture; private ArrayList<Rectangle> tubes; public Bird(int x,int y,ArrayList<Rectangle> tubes) { setBounds(x,y,32,32); this.tubes=tubes; texture = new BufferedImage[3]; try { //the problem is here sheet= ImageIO.read(getClass().getResourceAsStream("/Untitled.png")); texture[0]=sheet.getSubimage(0, 0, 16, 16); texture[1]=sheet.getSubimage(16, 0, 16, 16); texture[2]=sheet.getSubimage(32, 0, 16, 16); } catch (IOException e) { e.printStackTrace(); } } public void update() { if(isPressed) { y-=spd; } else { y+=spd; } for(int i=0;i<tubes.size();i++) { if(this.intersects(tubes.get(i))){ JOptionPane.showMessageDialog(null, "You loose"); System.exit(1); } } } public void render(Graphics g) { g.drawImage(texture[0],x,y,null); } }
вот полный код игры, которую я пытаюсь создать, и у меня есть это исключение:
Exception in thread "main" java.lang.IllegalArgumentException: input == null! at java.desktop/javax.imageio.ImageIO.read(Unknown Source)
игра представляет собой простую игру flappy bird и она не работает из-за этого исключения, когда я пытаюсь импортировать лист спрайта для птицы, и он находится в папке, которую я создал в рабочей области, как сказано в учебнике, который я смотрел, так что вы можете guyz plz помочь и сказать мне, как исправить эту проблему
Что я уже пробовал:
я действительно пытался использовать другие методы для импорта этого изображения, но все они давали одно и то же исключение
пожалуйста помогите guyz мне нужна ваша помощь в моей первой игре