2017-04-15 68 views
0

标题栏只显示我点击运行后,框架不工作.... 这是我的代码 我不知道发生了什么事情! 有人可以帮我吗?只有标题栏显示,JFrame没有显示

import java.awt.Canvas; 
import javax.swing.JFrame; 


public class Display extends Canvas implements Runnable { 

    private static final long serialVersionUID = 1L; 
    public static final int WIDTH = 800; 
    public static final int HEIGH = 600; 
    public static String TITLE = "3D Game"; 

    private Thread thread; 
    private boolean running = false; 
    private void start(){ 
     if(running) return; 
     running = true; 
     thread = new Thread(); 
     thread.start(); 

     System.out.println("Working"); 
    } 

    private void stop(){ 
     if(!running) 
      return; 
     running = false; 
     try{ 
     thread.join(); 
     }catch (Exception e){ 
      e.printStackTrace(); 
      System.exit(0); 
    } 
    } 
    public void run(){ 
     while(running){ 

     } 
    } 



    public static void main(String[] args){ 

     Display game = new Display(); 
     JFrame frame = new JFrame(); 
     frame.add(game); 
     //frame.pack(); 
     frame.setTitle(TITLE); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(WIDTH,HEIGHT); 
     frame.setLocationRelativeTo(null); 
     frame.setResizable(false); 
     frame.setVisible(true); 

     game.start(); 

    } 


} 
+0

您loop'同时,运行免费的,这意味着它会消耗所有的CPU周期,把你的UI停顿(如在UI线程没有' t得到一个机会跑) – MadProgrammer

回答

2

采取

public static final int HEIGH = 600; 

frame.setSize(WIDTH, HEIGHT); 

Canvas间接定义了两个public static领域分别称为WIDTHHEIGHT设置为12

之间看看差

一个更好的解决办法是重写Canvas小号getPreferredSize方法并返回你想要的首选大小...

@Override 
public Dimension getPreferredSize() { 
    return new Dimension(800, 600); 
} 

的你可以用包

Display game = new Display(); 
JFrame frame = new JFrame(); 
frame.add(game); 
frame.pack(); 
frame.setTitle(TITLE); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setLocationRelativeTo(null); 
frame.setResizable(false); 
frame.setVisible(true); 

的词或反对使用setSize警告在顶级容器上。一个窗口通常包含框架装饰,这些都包含在窗口界限内。如果使用setSize,则会缩小内容区域的窗口装饰量,这会导致预计的尺寸变小。相反,您应该覆盖主容器的getPreferredSize方法并致电pack。这允许窗口围绕内容“打包”,但为框架装饰留出空间,保留您请求的空间。

FrameSetup

你也可以看看:

有关详细信息

+0

谢谢你,我只是没有注意到这一点! –

0

你已经做了声明静态高度可变的,当一个错字,你已经宣布它为“HEIGH”,但在JFrame中你用了“HEIGHT

public static final int HEIGH = 600; 

frame.setSize(WIDTH,HEIGHT); 

所以变量更改为HEIGHT,它应该工作

+0

谢谢你,现在就工作 –