Я пытаюсь нарисовать что-то на холсте, добавить его в JFrame, а затем установить этот JFrame в полноэкранный режим. Моя проблема: в полноэкранном режиме я вижу только черный экран. Прежде чем экран станет черным, я вскоре увижу розовый фон холста.Java - Экран становится черным при настройке JFrame на Fullscreen
Рисование непосредственно на JFrame, а затем установка его на полноэкранный режим отлично работает, и я вижу тестовый текст. Я предполагаю, что проблема с отображением Canvas должным образом.
Вот мой код:
public class FullscreenTest extends Canvas {
private JFrame mainFrame;
public FullscreenTest(){
this.mainFrame = new JFrame();
JPanel contentPane = (JPanel) mainFrame.getContentPane();
contentPane.add(this);
}
public void run(DisplayMode dm){
setBackground(Color.PINK);
setForeground(Color.WHITE);
setFont(new Font("Arial", Font.PLAIN, 24));
Screen s = new Screen();
s.setFullScreen(dm, this.mainFrame);
try {
Thread.sleep(5000);
} catch (InterruptedException exc) { exc.printStackTrace(); }
s.closeFullScreenWindow();
}
public void paint(Graphics g){
g.drawString("This is some testtext", 200, 200);
}
public static void main(String[] args){
DisplayMode dm = new DisplayMode(800, 600, 32, DisplayMode.REFRESH_RATE_UNKNOWN);
FullscreenTest test = new FullscreenTest();
test.run(dm);
}
}
Вот что Screen.setFullScreen (DisplayMode дм, JFrame окно) делает метод:
//graphicsDevice = GraphicsEnvironment.getLocalGraphicsEnvironment()
// .getDefaultScreenDevice();
public void setFullScreen(DisplayMode dm, JFrame window){
window.setUndecorated(true);
window.setResizable(false);
graphicsDevice.setFullScreenWindow(window);
if(dm != null && graphicsDevice.isDisplayChangeSupported()){
graphicsDevice.setDisplayMode(dm);
}
}
Кто-нибудь есть ключ, почему я не см. содержание JFrame в полноэкранном режиме?
Вызывается ли вызов this.mainFrame.repaint() сразу после вызова setFullScreen(), в чем разница? Мне интересно, если переключение на полноэкранное сбрасывание бит, но оно не понимает, что нужно перерисовать. – JTeagle
Это, к сожалению, ничего не меняет. Пока экран переключается в полноэкранный режим, я коротко вижу розовый фон холста, пока экран не станет черным (даже без перерисовки()). – 1Q91
На самом деле, думая об этом, я думаю, что проблема заключается в том, что текущий поток спящий - потому что текущий поток - это поток пользовательского интерфейса, поэтому вы фактически приостанавливаете поток пользовательского интерфейса и не позволяете ему продолжать работать. Попробуйте взять Thread.sleep() из этого класса и поместите его в свой main() после вызова run(), а затем добавьте отдельный метод, чтобы снова свернуть окно. Таким образом, сон находится в потоке приложения, а не в потоке пользовательского интерфейса, если у меня правильная теория потоков. – JTeagle