현재 윈도우에 픽셀을 그려 넣으려는 중이므로 프로그램 시작시 픽셀을 벗어나 인덱스를 벗어난 것처럼 보입니다. 나는 정직하게 그것을 고치는 방법을 모른다. 아무도 문제가 어디 있는지 말해 줄 수 있습니까? 나는 많은 시간을 확인해 봤지만 그것이 나에게 잘되어야하는 것처럼 보인다. 아래에 내 프로젝트의 모든 코드를 주었지만 오류는 for 루프가있는 render 메서드 (Game 클래스)의 줄에 있습니다.배열 인덱스가 픽셀을 그릴 때 경계를 벗어났습니다.
편집 :
이오류가 게임 클래스 루프의 어딘가입니다. pixles "라인 에서"48601 [내가] =의 screen.pixels [내가] "
화면 클래스
public class Screen {
private int width,height;
public int[] pixels;
public Screen(int width,int height){
this.width = width;
this.height = height;
pixels = new int[width * height];
}
public void render(){
for (int y = 0; y < height; y++){
for (int x = 0; x < width; x++){
pixels[x + y * width] = 0xff00ff;
}
}
}
}
java.lang.ArrayIndexOutOfBoundsException을 말한다
Game Class import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.image.BufferStrategy; import java.awt.image.BufferedImage; import java.awt.image.DataBufferInt; import javax.swing.JFrame; public class Game extends Canvas implements Runnable{ private int width = 300; private int height = width/16 * 9; private int scale = 3; private Thread thread; private boolean running = false; private JFrame frame; private BufferedImage image = new BufferedImage(width * scale, height * scale,BufferedImage.TYPE_INT_RGB); private int[] pixels = ((DataBufferInt)image.getRaster().getDataBuffer()).getData(); private Screen screen; public Game(){ screen = new Screen(width,height); frame = new JFrame("Relm Of The Mad God Clone"); this.setPreferredSize(new Dimension(width * scale, height * scale)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setResizable(false); frame.add(this); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); start(); } public synchronized void start(){ thread = new Thread(this,"Running Thread"); thread.start(); running = true; } public synchronized void stop(){ try{ thread.join(); running = false; }catch (InterruptedException e){ e.printStackTrace(); } } public static void main(String[] args) { Game g = new Game(); } private void update(){ } private void render(){ BufferStrategy buffer = getBufferStrategy(); if (buffer == null){ createBufferStrategy(3); return; } screen.render(); for (int i = 0; i < pixels.length; i++){ pixels[i] = screen.pixels[i]; } Graphics g = buffer.getDrawGraphics(); g.drawImage(image, 0, 0, getWidth(), getHeight(),this); g.dispose(); buffer.show(); } @Override public void run() { while (running){ update(); render(); } } }
코드에서 정확히 어디서? – MadProgrammer
원래 게시물에서 말하지만 Game 클래스의 for 루프 어딘가에 있습니다. 그것은 "java.lang.ArrayIndexOutOfBoundsException : 48601"줄에 "pixles [i] = screen.pixels [i]"@MadProgrammer라고 말합니다. – user2318396
두 배열의 길이가 같습니까? 볼 수 있도록 각각의 길이를 인쇄하는 println()을 추가하십시오. – NormR