2010-03-28 14 views
5

Windows no reconoce la resolución nativa de mi monitor extraño, por lo que tengo que establecer una resolución personalizada para él. El problema es que Java no lo reconoce porque no está en la lista "aprobada" de Win7, por lo que el modo de pantalla completa se "atasca". Netbeans sale bien de pantalla completa, por lo que tiene que haber una forma de evitar esto. Alguien lo sabe?Resolución de monitor personalizado no reconocida por Java

// Editar (29/03/2010): Parece que NetBeans está simulando pantalla completa en lugar de pasar al modo de pantalla completa exclusiva, por lo que puede que no se pueda solucionar. Por ahora, también estoy fingiendo. Parece que java debería reconocer el active DisplayMode como válido, sin embargo.

Este ejemplo reproduce el problema:


package resolutionexample; 

import java.awt.Dimension; 
import java.awt.DisplayMode; 
import java.awt.GraphicsDevice; 
import java.awt.GraphicsEnvironment; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 

public class Main { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
       GraphicsDevice gd = ge.getDefaultScreenDevice(); 

       DisplayMode currentDM = gd.getDisplayMode(); 

       boolean currentInAvailable = false; 

       System.out.println("Available resolutions:"); 
       for (DisplayMode availDM : gd.getDisplayModes()){ 
        //System.out.println(availDM.getWidth() + "x" + availDM.getHeight()); 
        if (availDM.equals(currentDM)){ 
         currentInAvailable = true; 
        } 
       } 

       System.out.println("Current resolution: " + currentDM.getWidth() + "x" + currentDM.getHeight()); 

       System.out.println("Current in available: " + currentInAvailable); 


       JFrame frame = new JFrame("Resolution Bug Example"); 
       frame.setVisible(true); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       if (!gd.isFullScreenSupported()){System.exit(0);} 

       gd.setFullScreenWindow(frame); 

       gd.setFullScreenWindow(null); 
      } 
     }); 
    } 
} 

salida corriendo 1680x1050 (poco firme la resolución nativa del monitor):


run: 
Available resolutions: 
Current resolution: 1680x1050 
Current in available: false 
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Invalid display mode 
     at sun.awt.Win32GraphicsDevice.setDisplayMode(Win32GraphicsDevice.java:393) 
     at sun.awt.Win32GraphicsDevice.setFullScreenWindow(Win32GraphicsDevice.java:329) 
     at resolutionexample.Main$1.run(Main.java:43) 
     at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) 
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:597) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
     at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 
BUILD SUCCESSFUL (total time: 2 seconds) 

salida si fijo mi resolución de 1024x768 antes de ejecutar:


run: 
Available resolutions: 
Current resolution: 1024x768 
Current in available: true 
BUILD SUCCESSFUL (total time: 2 seconds) 

Respuesta

2

¿Qué quiere decir con atascado? ¿No es una buena resolución o no hay un modo real de pantalla completa? Para una gran pantalla que podría intentar

Rectangle rect = GraphicsEnvironment.getLocalGraphicsEnvironment(). 
       getMaximumWindowBounds(); 
JFrame frame = new JFrame(); 
frame.setPreferredSize(new Dimension(rect.width, rect.height)); 

para la pantalla completa de palanca puede simplemente copiar el sources from netbeans' MainWindow :-)

+0

entra en pantalla completa verdadera, pero no va a salir de ella, ni responderá a Alt-Tab mientras está atascado. Por ahora, estoy usando una pantalla completa falsa similar a la que describes. :) – Angie

1

Cómo sobre la adición de la solución a Windows 7?

lo hice una vez con PowerStrip (http://entechtaiwan.com/util/ps.shtm.) Pero que era para XP.

+0

Probablemente podría conseguir que funcione para mi PC, pero odiaría tener que explicar eso a mis eventuales usuarios finales;) – Angie

Cuestiones relacionadas