2013-12-20 4 views
0

Я пытался исправить, но он никогда не меняет экран. Я пытаюсь использовать Graphics, как показано в методе render(). Скажите, если что-то не так внутри метода визуализации, поэтому я могу расслабиться, потому что я не могу найти проблему.Почему экран не меняет цвет?

import java.awt.Canvas; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.image.*; 

import javax.swing.JFrame; 

public class Game extends Canvas implements Runnable { 
private static final long serialVersionUID = 1L; 
public static int width = 300; 
public static int height = width/16*9; 
public static int scale = 3; 

private Thread thread; 
private boolean running = false; 
private JFrame frame; 

public synchronized void start() { 
    thread = new Thread(); 
    thread.start(); 
    running = true; 
} 

public synchronized void stop() { 
    running = false; 
    try{ 
     thread.join(); 
    }catch(InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

public Game() { 
    Dimension size = new Dimension(width * scale, height * scale); 
    setPreferredSize(size); 

    frame = new JFrame(); 
} 

public void run() { 
    while(running) { 
     tick(); 
     render(); 
    } 
} 

void tick() {} 

public void render() { 
    BufferStrategy bs = getBufferStrategy(); 
    if(bs==null){ 
     createBufferStrategy(3); 
     return; 
    } 

    Graphics g = bs.getDrawGraphics(); 
    g.setColor(Color.BLACK); 
    g.fillRect(0, 0, getWidth(), getHeight()); 
    bs.dispose(); 
    bs.show(); 
} 
public static void main(String[] args) { 
    Game game = new Game(); 

    game.frame.setResizable(false); 
    game.frame.setTitle("Rain"); 
    game.frame.add(game); 
    game.frame.pack(); 
    game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    game.frame.setLocationRelativeTo(null); 
    game.frame.setVisible(true); 

    game.start(); 
} 

} 
+1

Вы устанавливаете() свою BufferStrategy, прежде чем показывать(). Это не может быть хорошо. –

+0

Я пробовал это. Кажется, не работает. – user2469009

+0

Ваш код кажется очень похожим на [этот вопрос] (http://stackoverflow.com/questions/20547542/bufferstrategy-not-working/20547780#20547780). Я бы попытался сравнить ваш код с этим, так как я думаю, что они, вероятно, используют те же учебные пособия. – DoubleDouble

ответ

1

Позвольте мне дать вам трассировку стека вашей ошибки.

Ваш метод визуализации даже не вызывается здесь.
Это потому, что ваш метод запуска вообще не вызывается.
Причина в том, что вы не передали правильный объект Runnable во время создания Thread. Он создает поток с пустым запуском.
В вашем методе запуска, просто замените

thread = new Thread(); 

с

thread = new Thread(this); 

И он должен работать.

Надеюсь, это поможет. Наслаждаться.

+0

Это сработало. Спасибо – user2469009

Смежные вопросы