2010-03-28 4 views
5

Độ phân giải gốc của màn hình lạ của tôi không được Windows công nhận, vì vậy tôi phải đặt độ phân giải tùy chỉnh cho Windows. Vấn đề là java không nhận ra nó vì nó không nằm trong danh sách "được phê duyệt" của Win7, vì vậy chế độ toàn màn hình bị "kẹt". Netbeans xuất hiện trên toàn màn hình, vì vậy phải có cách để giải quyết vấn đề này. Có ai biết không?Độ phân giải màn hình tùy chỉnh không được nhận dạng bởi Java

// Chỉnh sửa (3/29/2010): Có vẻ như NetBeans đang giả mạo toàn màn hình thay vì thực sự đi vào chế độ Toàn màn hình độc quyền, vì vậy điều này có thể không thực sự giải được. Bây giờ, tôi cũng giả mạo nó. Có vẻ như java phải nhận ra hoạt động DisplayMode là hợp lệ, mặc dù.

Ví dụ này tái tạo vấn đề:


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); 
      } 
     }); 
    } 
} 

Output chạy 1680x1050 (độ phân giải gốc rung rinh của màn hình):


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) 

Output nếu tôi đặt độ phân giải của tôi để 1024x768 trước khi chạy:


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

Trả lời

2

Bạn có ý gì khi bị kẹt? Không phải là độ phân giải tốt hay không có chế độ toàn màn hình thực? Đối với một màn hình lớn, bạn có thể thử

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

Đối với toàn màn hình chuyển đổi bạn chỉ có thể sao chép các sources from netbeans' MainWindow :-)

+0

Nó đi vào toàn màn hình thực sự, nhưng nó sẽ không đi ra khỏi nó, cũng không phải nó sẽ đáp ứng với alt-tab trong khi nó bị mắc kẹt. Hiện tại, tôi thực sự đang sử dụng chế độ toàn màn hình giả giống với màn hình bạn mô tả. :) – Angie

1

Làm thế nào về việc thêm độ phân giải lên Windows 7?

Tôi đã làm điều này một lần với PowerStrip (http://entechtaiwan.com/util/ps.shtm.) Nhưng đó là dành cho XP.

+0

Tôi có lẽ có thể làm điều đó để làm việc cho PC của mình, nhưng tôi ghét phải giải thích rằng với người dùng cuối cùng của mình;) – Angie