2012-04-24 47 views
5

Tôi có một dự án Java Swing hoạt động tốt trên cả Windows và Ubuntu. Tôi không có bất kỳ máy Mac nào nên tôi không thể kiểm tra nó; Tôi đã sử dụng chủ đề Nimbus làm tiêu chuẩn cho dự án này.Swing GUI không hiển thị hoặc hiển thị lỗi khi được khởi chạy trên máy Mac

Bây giờ, gần đây bạn tôi đã thử nghiệm cùng một dự án cả trong Eclipse và jar xuất, và nó đưa ra các lỗi không đề cập đến bất kỳ lớp Java cụ thể nào mà tôi đã tạo.

Nó hiển thị GUI, nhưng đôi khi nó dính hoặc đôi khi menu bị thiếu.

Dưới đây là một phiên bản rút gọn lỗi hiển thị trong khi tung ra GUI:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at com.apple.laf.AquaMenuPainter.paintMenuBarBackground(AquaMenuPainter.java:123) 
    at com.apple.laf.AquaMenuUI.paintBackground(AquaMenuUI.java:57) 
    at com.apple.laf.AquaMenuPainter.paintMenuItem(AquaMenuPainter.java:160) 
    at com.apple.laf.AquaMenuUI.paintMenuItem(AquaMenuUI.java:35) 
    at javax.swing.plaf.basic.BasicMenuItemUI.paint(BasicMenuItemUI.java:452) 
    at javax.swing.plaf.basic.BasicMenuItemUI.update(BasicMenuItemUI.java:448) 
    at javax.swing.JComponent.paintComponent(JComponent.java:752) 
    at javax.swing.JComponent.paint(JComponent.java:1029) 
    at javax.swing.JComponent.paintChildren(JComponent.java:862) 
    at javax.swing.JComponent.paint(JComponent.java:1038) 
    at javax.swing.JComponent.paintChildren(JComponent.java:862) 
    at javax.swing.JComponent.paint(JComponent.java:1038) 
    at javax.swing.JLayeredPane.paint(JLayeredPane.java:567) 
    at javax.swing.JComponent.paintChildren(JComponent.java:862) 
    at javax.swing.JComponent.paint(JComponent.java:1038) 
    at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:34) 
    at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60) 
    at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97) 

Ông có thể cho tôi biết những gì có thể là vấn đề, hoặc là có bất kỳ Look cụ thể và cảm nhận chủ đề tôi nên sử dụng trên Mac ? Nimbus không được hỗ trợ trên Mac và nếu có thì tôi nên sử dụng cái gì?

+0

Ok nếu tôi thay đổi chủ đề thành "Aqua" nó bắt đầu hoạt động, vì vậy câu hỏi của tôi nên được loại bỏ và tôi muốn hỏi làm thế nào để phát hiện trong java, nếu hệ điều hành cơ bản là MAC ?? – Johnydep

+1

IMHO, bạn không chạm vào giao diện trên máy Mac. Chủ đề Aqua của Apple thật tuyệt vời. Apple đã làm điều đó theo cách mà bạn thậm chí không cần phải thiết lập giao diện. Nó sẽ được tự động Aqua thay vì Sun Swing Metal. –

+0

@MartijnCourteaux, đúng nhưng tôi đang chạy qua vấn đề với cùng một mã chạy trên MAC, khi tôi đã explictly đặt Look & Feel để "Nimbus", hoặc là nó mà tôi sẽ phải loại bỏ nhiệm vụ này? – Johnydep

Trả lời

6

tôi sẽ không chạm vào chủ đề trong OS X, nó là tuyệt vời tự động: D

Chỉ cần chắc chắn rằng bạn không thay đổi chủ đề khi bạn đang ở trên máy Mac.

String osName = System.getProperty("os.name").toLowerCase(); 
if (!osName.contains("mac")) // if not on mac 
{ 
    // set nimbus 
} 
// otherwise, do nothing. It goes automatically to Aqua. 
Các vấn đề liên quan