Java 尝试使用JFrame显示窗口,但不起作用
我有一个显示类,它应该以指定的宽度和高度打开一个窗口到控制台,窗口上有一个画布。我在Eclipse上运行这个程序,就在几天前,程序运行得很好,窗口打开得很好,但现在不是,我没有对代码做任何更改。我会发布我的完整程序,虽然它有点长。基本上,我有一个Launcher类,它创建一个名为Game的游戏类实例。然后它使用Game.Start()调用游戏类方法Start()。此方法创建一个线程并使用Thread.start()执行它。这将执行run()方法,该方法调用init()方法,该方法(最终)创建显示并调用显示类 很抱歉让你读了这些,但我不想漏掉任何东西。另一件有助于发现问题的事情是,在run()方法创建显示以及它应该无限地通过tick()和render()循环运行的所有内容之后。我还没有编写退出循环的代码,但是当我在Eclipse中启动这个程序时,它几乎立即终止;在我手动终止它之前,它是否应该运行Java 尝试使用JFrame显示窗口,但不起作用,java,Java,我有一个显示类,它应该以指定的宽度和高度打开一个窗口到控制台,窗口上有一个画布。我在Eclipse上运行这个程序,就在几天前,程序运行得很好,窗口打开得很好,但现在不是,我没有对代码做任何更改。我会发布我的完整程序,虽然它有点长。基本上,我有一个Launcher类,它创建一个名为Game的游戏类实例。然后它使用Game.Start()调用游戏类方法Start()。此方法创建一个线程并使用Thread.start()执行它。这将执行run()方法,该方法调用init()方法,该方法(最终)创建显示
public class Launcher {
public static void main(String[] args){
Game game = new Game("This is the title", 400, 400);
game.start();
}
}
import dev.codenmore.firstgame.display.Display;
public class Game implements Runnable{
private Display display;
private int width, height;
private String title;
private boolean running = false;
private Thread thread;
public Game(String title, int width, int height){
this.width = width;
this.height = height;
this.title = title;
}
public void init(){
display = new Display(title, width, height);
}
public void tick(){
}
public void render(){
}
public void run(){
init();
while(running){
tick();
render();
}
stop();
}
public synchronized void start(){
if (running = true)
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();
}
}
}
import java.awt.Canvas;
import java.awt.Dimension;
import javax.swing.JFrame;
public class Display {
private JFrame frame;
private String title;
private int height, width;
private Canvas canvas;
public Display(String title, int width, int height){
this.width = width;
this.height = height;
this.title = title;
createDisplay();
}
private void createDisplay(){
frame = new JFrame(title);
frame.setSize(width, height);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
canvas = new Canvas();
canvas.setPreferredSize(new Dimension(width, height));
canvas.setMinimumSize(new Dimension(width, height));
canvas.setMaximumSize(new Dimension(width, height));
frame.add(canvas);
frame.pack();
frame.setVisible(true);
}
}
编辑
意识到将所有代码粘贴到帖子上的错误,我将Display类复制并粘贴到一个新项目中,并调用它,窗口完全打开。所以问题一定是在我的程序中调用Display类的代码没有被执行?正如@John3136所说
替换
if (running = true)
与
在您的启动方法中
因为
(running=true)
将始终返回真值。您的程序将提前结束。
如果(running=true)
??你所有的图形都在背景线上?您是在遵循特定的指南还是其他什么,还是只是自己尝试一下?为了更快地获得更好的帮助,请发布一篇文章。@John3136是的,我正在遵循一篇教程。据我所知,if语句只是一种预防措施,以确保在已经有一个线程正在运行的情况下,不会执行新线程。这是我在第五个视频中看到的教程播放列表的链接。@MasterBlaster很抱歉,让它太多了。如果我将来发帖的话,我一定会采纳这个建议。这是我的第一篇帖子,我不知道问题出在哪里,所以我就把它全部贴了出来。但对每个人来说,我不认为这是代码本身的问题,因为我已经广泛地查看了它的错误。不敢相信我以前没有看到这个。。。非常感谢。太尴尬了。。。
(running=true)