Độ 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)
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