You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发2D版Minecraft时Thread调用start后未执行run方法问题排查

核心问题

你创建Thread对象时没有传入实现了Runnable接口的当前Minecraft实例,导致线程启动后执行的是Thread类自带的空run()方法,不会触发你编写的游戏循环逻辑。

修复步骤
  1. 修改init()方法中的线程初始化代码,将当前类实例作为参数传入Thread构造方法:
private void init(){
    window = new Window("Minecraft 1.17.1", 800, 600);
    // 传入this(即当前Minecraft实例,它实现了Runnable接口)
    thread = new Thread(this);
    thread.start();
}
  1. 补充渲染逻辑的缺失部分,否则画面无法正常显示:
private void render(){
    BufferStrategy bs = getBufferStrategy();
    if(bs == null){
        this.createBufferStrategy(3);
        return;
    }
    Graphics g = bs.getDrawGraphics();
    // 清屏操作,避免上一帧画面残留
    g.fillRect(0, 0, getWidth(), getHeight());
    g2d = (Graphics2D) g;
    addImage("../../assets/dirt.png",0,0,g,0,0, false);
    // 释放图形资源
    g.dispose();
    // 将缓冲区内容输出到窗口
    bs.show();
}
  1. 需将当前Canvas实例添加到你封装的Window窗口中,否则画面不会挂载到窗口显示,你可以在init方法创建Window后补充对应逻辑,比如:
window.add(this);
// 可选:触发窗口重绘
window.setVisible(true);
其他注意事项
  • 游戏循环建议增加帧率控制,避免无限制占用CPU资源,可以在循环中增加固定时间的sleep逻辑,或者通过时间差计算实现稳定FPS。
  • 图片加载建议提前在初始化阶段完成,不要在每次render的时候都读本地文件,会严重拖慢渲染性能。

内容的提问来源于stack exchange,提问作者user15428862

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:54:03