2012-02-23 4 views
4

Я работаю над проектом игры, и я написал базовый код, который позволяет игре работать в полноэкранном режиме.Скриншоты в полноэкранном режиме Java

Моя проблема заключается в том, что пока игра находится в полноэкранном режиме, я не могу нажать Prnt Scrn, чтобы делать скриншоты! Если я попытаюсь сделать снимок экрана, это просто скриншоты, которые находятся за полноэкранным игровым окном. Любые идеи, почему это не работает?

Я бегу на Windows 7. Вот SSCCE иллюстрирующую мою проблему:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class FullscreenScreenShotSSCCE extends JFrame 
{ 
    private JPanel screenP; 

    private GraphicsDevice grDev; 

    /** 
    * Constructor 
    * Preconditions: None. 
    * Postconditions: The window for the SSCCE is created. 
    **/ 

    public FullscreenScreenShotSSCCE() 
    { 
     super("Fullscreen Prnt Scrn problem SSCCE"); 
     int screenX = 640; 
     int screenY = 480; 
     this.setSize(screenX,screenY); 

     // set up resolution change mode 

     grDev = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); // obtains your graphics device 

     // setup the game for full-screen if requested. 

     System.out.println("Trying to start program in Fullscreen mode."); 

     if(grDev.isFullScreenSupported()) // makes sure fullscreen is supported before doing anything. 
     { 
      System.out.println("FullScreen is supported"); 
      this.setUndecorated(true); 
      DisplayMode resChangeMode = new DisplayMode(640,480,32,DisplayMode.REFRESH_RATE_UNKNOWN); // create new DisplayMode with different resolution. 

      try 
      { 
       grDev.setFullScreenWindow(this); // set fullscreen mode on. Otherwise this won't work 
       grDev.setDisplayMode(resChangeMode); // change DisplayMode to our new resolution. 
       System.out.println("Change resolution: Success!"); 
      } 
      catch(Exception e) 
      { 
       System.out.println("Change resolution: FAIL!"); 
      } 
     } 
     this.setExtendedState(MAXIMIZED_BOTH); 

     // instantiate main panel 

     screenP = new SSCCEPanel(); 
     this.add(screenP); 

     // finishing touches on Game window 

     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.setVisible(true); 

     System.out.println("Game Window successfully created!!!"); 
    } 


    public static void main(String[] args) 
    { 
     FullscreenScreenShotSSCCE gui = new FullscreenScreenShotSSCCE();   
    } 
} 




/** 
* SSCCEPanel is the JPanel that manages the example's timer, painting, and logic. 
**/ 

class SSCCEPanel extends JPanel 
{ 
    private Timer timer; 
    public double prevFPS; 
    boolean timerReady; 

    // The SoundPlayer object is used by the example to play the sounds. 

    public SSCCEPanel() 
    { 
     super(true); 
    } 

    /** 
    * repaints the SSCCE. 
    * This just shows the current FPS and the number of sounds currently playing. 
    **/ 

    public void paintComponent(Graphics g) 
    { 
      super.paintComponent(g); 

      Graphics2D g2D = (Graphics2D) g; 
      g2D.setColor(new Color(0x000000)); 
      g2D.drawString("Java fullscreen!", 20,20); 
      g2D.drawString("Try to take a screenshot!", 20,40); 
      g.dispose(); 
    } 
} 
+0

Я захватил код, который вы отправили, скомпилировал и запустил, и смог получить скриншот, который возвращает «Java Fullscreen! Попробуйте сделать снимок экрана!». –

+0

Возможно, проблема с системой GUI. Скриншоты отлично работают на KDE. –

ответ

0

Проблема остается нерешенной. В заключение, проблема, вероятно, присуща графическим устройствам/драйверам моей машины, поскольку другие пользователи не могут воспроизвести проблему, которую я испытываю. Поэтому эту проблему больше не стоит искать в родной Java.

1

Try Alt-PrintScreen (захватывает текущее окно). Это может сделать трюк в полноэкранном режиме. Удачи :-)

+0

это не сработало. Как обычно, снимок экрана обо всем, что находится за полноэкранным игровым окном. – Cazra

0

Попробуйте ctrl + alt + PrtScrn, если он работает.

+0

нет, это не сработал. – Cazra

0

Вы можете попробовать java.awt.Robot:

try 
    { 
     Robot pixelGrabber = new Robot(); 
     java.awt.image.BufferedImage bi = pixelGrabber.createScreenCapture (new Rectangle (0, 0, 1024, 768)); 
    } 
    catch (AWTException ex) 
    { 
     ex.printStackTrace(); 
    } 

Вы скорректирует 1024, 768 с вашими настройками экрана, а затем посмотреть на метод, чтобы получить размер экрана динамически.

+0

Я пробовал это, и это не сработало. – Cazra

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