Я кодирую игру, и я хочу, чтобы там логотип компании около 3-5 секунд, прежде чем войти в игру. Вот мой код:Почему вместо моего изображения появляется пустой холст?
Graphics gfx = buffer.getDrawGraphics();
gfx.setColor(new Color(146, 17, 189));
gfx.fillRect(0, 0, this.getWidth(), this.getHeight());
// Draw stuffs between here...
gfx.drawImage(icon.getImage(), 0, 0, this.getWidth(), this.getHeight(), null);
int timer = 0;
while (timer <= 4) {
try {
Thread.sleep(1000);
} catch (InterruptedException exc) {
exc.printStackTrace();
System.out.println("Could not put thread to sleep! :(");
}
timer++;
}
gfx.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null);
if (key.showFPS == true) {
//Set it up so that it still works with the "per second" rule.
key.showPerSeconds(buffer, FPS, TPS);
}
// and here.
gfx.dispose();
buffer.show();
}
Моя главная проблема заключается в том, что появляется пустой JFrame, а затем через 4 секунды, сама игра появится. Что случилось с моим кодом? Должен ли я что-то делать, что я не сейчас?
'Графика gfx = buffer.getDrawGraphics();' Что такое 'buffer'? Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). Не блокируйте EDT (Event Dispatch Thread) - графический интерфейс «замораживается», когда это произойдет. Вместо вызова 'Thread.sleep (n)' реализовать Swing 'Timer' для повторения задач или' SwingWorker' для длительных задач. Подробнее см. [Параллелизм в Swing] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/). –