线程/可运行不调用运行



我正试图做一个小测试Minecraft 2d版本,我不能继续任何进一步,因为我的线程不会调用run()。我确实看过很多教程都是这么做的,甚至我自己的一款游戏也使用了这种方法。我基本上是在抄袭我制作的另一款成功的游戏。

package com.bmc.minecraft2d;
import com.bmc.graphicsengine.Window;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferStrategy;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Minecraft extends Canvas implements Runnable {
private Window window;
private Thread thread;
private Graphics2D g2d;
private void init(){
window = new Window("Minecraft 1.17.1", 800, 600);
thread = new Thread();
thread.start();
}
public Minecraft(){
init();
System.out.println("Got past init.");
}
private void update(){
}
public void addImage(String file, int x, int y, Graphics g, int width, int height, boolean scaleImg) {
Image img;
try {
img = ImageIO.read(new File(file));
if(scaleImg) {
Image scale = img.getScaledInstance(width, height, Image.SCALE_DEFAULT);
g.drawImage(scale, x, y, this);
} else {
g.drawImage(img, x, y, this);
}
} catch (IOException e) {
e.printStackTrace();
}
}
private void render(){
BufferStrategy bs = getBufferStrategy();
if(bs == null){
this.createBufferStrategy(3);
return;
}
Graphics g = bs.getDrawGraphics();
g2d = (Graphics2D) g;
addImage("../../assets/dirt.png",0,0,g,0,0, false);
}
public void run(){
System.out.println("In the game loop.");
while(true){
update();
render();
}
}
public void stop() throws InterruptedException {
thread.join();
}
public static void main(String[] args){
new Minecraft(); // Get out of having to use "static"
}
}

我正在使用IntelliJ IDEA CE。可能会在将来的某个时候切换回Eclipse。

好吧,看来我又回答了我自己的问题。我发现我忘了把游戏添加到JFrame(我不知道为什么我只是喜欢用JFrame和普通java制作游戏,没有像glfw或lwjgl这样的库)。出于某些原因,我只是喜欢从头开始制作游戏。