gpt4 book ai didi

Java - IndexOutOfBoundsException

转载 作者:行者123 更新时间:2023-12-01 23:38:43 27 4
gpt4 key购买 nike

我正在用 Java 开发一个应用程序,并且已经完成了三个主要类文件的编写 - 但是我遇到了一个令人困惑的错误。我目前只是“尝试”在屏幕上绘制像素,但我的像素数组不起作用。

即使我现在在代码中收到警告或错误,我还是在 Render.java 中收到 IndexOutOfBoundsException

Display.java

public class Display extends Canvas implements Runnable {

private static final long serialVersionUID = 1L;

public static final int WIDTH = 300;
public static final int HEIGHT = 190;
public static final int SCALE = 3;

public static Dimension DIMENSION = new Dimension(WIDTH * SCALE, HEIGHT * SCALE);

public static final String TITLE = "Untitled Project";

public int[] pixels;

public boolean isRunning = false;

public Thread thread;
public Screen screen;
public Render render;

public BufferedImage img;

public Display() {
screen = new Screen(WIDTH, HEIGHT);
img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
pixels = ((DataBufferInt) img.getRaster().getDataBuffer()).getData();
}

public void start(boolean isDebug) {
if (isRunning)
return;

isRunning = true;

thread = new Thread(this);
thread.start();
}

public void stop() {
if (!isRunning)
return;

isRunning = false;

try {
thread.join();
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
}

private void render() {
BufferStrategy bs = this.getBufferStrategy();

if (bs == null) {
createBufferStrategy(3);
return;
}

screen.render();

for (int i = 0; i < WIDTH * HEIGHT; i++)
pixels[i] = screen.pixels[i];

Graphics g = bs.getDrawGraphics();

g.drawImage(img, 0, 0, WIDTH, HEIGHT, null);
g.dispose();
bs.show();
}

private void tick() {

}

public void run() {
while (isRunning) {
render();
tick();
}
}

public static void main(String[] args) {
Display display = new Display();
display.setMinimumSize(DIMENSION);
display.setMaximumSize(DIMENSION);
display.setPreferredSize(DIMENSION);

JFrame frame = new JFrame();
frame.setTitle(TITLE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(display, BorderLayout.CENTER);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setVisible(true);

display.start(true);
}
}

Render.java

public class Render {

public final int width;
public final int height;
public final int[] pixels;

public Render(int width, int height) {
this.width = width;
this.height = height;
pixels = new int[width * height];
}

public void draw(Render render, int xOffset, int yOffset) {
for (int y = 0; y < render.height; y++) {

int yPix = y + yOffset;

for (int x = 0; x < render.width; x++) {
int xPix = x + xOffset;

ERROR --> pixels[xPix + yPix * width] = render.pixels[x + y * render.width];
}
}
}
}

Screen.java

public class Screen extends Render {

public Render render;
public Random random;

public Screen(int width, int height) {
super(width, height);
render = new Render(256, 256);
random = new Random();

for (int i = 0; i < 256 * 256; i++) {
render.pixels[i] = random.nextInt();
}
}

public void render() {
draw(render, 0, 0);
}
}

错误

Exception in thread "Thread-2" java.lang.ArrayIndexOutOfBoundsException: 57000
at com.willajhughes.java.graphics.Render.draw(Render.java:23)
at com.willajhughes.java.graphics.Screen.render(Screen.java:21)
at com.willajhughes.java.Display.render(Display.java:76)
at com.willajhughes.java.Display.run(Display.java:94)
at java.lang.Thread.run(Unknown Source)

最佳答案

您的像素数组的大小为宽度*高度。您正在尝试访问宽度 + 高度 * 宽度。正如您可能想象的那样,Java 先生不会对此表示满意。

关于Java - IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18276890/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com