Я недавно работал с BufferStrategy и JFrame для предварительной графики. Однако при попытке нарисовать простой прямоугольник на рамке ничего не появляется. Вот код:
import java.awt.*;
import java.awt.image.BufferStrategy;
import javax.swing.*;
public class GTestingMain {
public static void main(String[] args) {
JFrame myFrame = new JFrame();
Canvas myCanvas = new Canvas();
Graphics2D g;
BufferStrategy strategy;
myFrame.setSize(500, 500);
myFrame.setResizable(false);
myFrame.setLocationRelativeTo(null);
myFrame.setVisible(true);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myCanvas.setPreferredSize(new Dimension(500, 500));
myFrame.add(myCanvas);
myFrame.pack();
strategy = myCanvas.getBufferStrategy();
if(strategy == null) {
myCanvas.createBufferStrategy(3);
}
strategy = myCanvas.getBufferStrategy();//Throwing in again so strategy != null
do {
do {
g = (Graphics2D) strategy.getDrawGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, 500, 500);
g.setColor(Color.red);
g.fillRect(10, 40, 50, 70);
g.dispose();
}while(strategy.contentsRestored());
strategy.show();
}while(strategy.contentsLost());
}
}
Теперь проблема немного более уникальна. Когда я захожу в отладчик и перебираю код, он работает просто отлично. Если я бегу нормально, пусто. Если я нажму на фрейм до того, как он будет нарисован в отладчике - пусто.
Я знаю, что могу «решить» эту проблему с помощью потока, но я хотел бы знать, почему это работает * в режиме отладки, но не в обычном режиме. Спасибо!