Java 尝试使用JFrame显示窗口,但不起作用

Java 尝试使用JFrame显示窗口,但不起作用,java,Java,我有一个显示类,它应该以指定的宽度和高度打开一个窗口到控制台,窗口上有一个画布。我在Eclipse上运行这个程序,就在几天前,程序运行得很好,窗口打开得很好,但现在不是,我没有对代码做任何更改。我会发布我的完整程序,虽然它有点长。基本上,我有一个Launcher类,它创建一个名为Game的游戏类实例。然后它使用Game.Start()调用游戏类方法Start()。此方法创建一个线程并使用Thread.start()执行它。这将执行run()方法,该方法调用init()方法,该方法(最终)创建显示

我有一个显示类,它应该以指定的宽度和高度打开一个窗口到控制台,窗口上有一个画布。我在Eclipse上运行这个程序,就在几天前,程序运行得很好,窗口打开得很好,但现在不是,我没有对代码做任何更改。我会发布我的完整程序,虽然它有点长。基本上,我有一个Launcher类,它创建一个名为Game的游戏类实例。然后它使用Game.Start()调用游戏类方法Start()。此方法创建一个线程并使用Thread.start()执行它。这将执行run()方法,该方法调用init()方法,该方法(最终)创建显示并调用显示类

很抱歉让你读了这些,但我不想漏掉任何东西。另一件有助于发现问题的事情是,在run()方法创建显示以及它应该无限地通过tick()和render()循环运行的所有内容之后。我还没有编写退出循环的代码,但是当我在Eclipse中启动这个程序时,它几乎立即终止;在我手动终止它之前,它是否应该运行

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)