2015-01-23 4 views
1

Java로 만든 응용 프로그램이 있습니다. 나는 크로스 플랫폼 LAF (금속)와 이클립스에서 실행하면 UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());Java 프로그램이 아쿠아 LAF와 시스템 LAF를 동시에 사용하는 이유는 무엇입니까?

그것은 JButton의 금속에 다른 구성 요소, 아쿠아를 사용하여 JSpinners의, 그리고 JComboBoxes 사용 아쿠아를 보여주고 제대로 작동하지 않습니다. 그들은 실제로 던지기 :

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at com.apple.laf.AquaMenuPainter.paintSelectedMenuItemBackground(AquaMenuPainter.java:153) 
at com.apple.laf.AquaComboBoxRendererInternal.paintComponent(AquaComboBoxRenderer.java:151) 
at javax.swing.JComponent.paint(JComponent.java:1054) 
at javax.swing.CellRendererPane.paintComponent(CellRendererPane.java:151) 
at javax.swing.plaf.basic.BasicListUI.paintCell(BasicListUI.java:227) 
at javax.swing.plaf.basic.BasicListUI.paintImpl(BasicListUI.java:317) 
at javax.swing.plaf.basic.BasicListUI.paint(BasicListUI.java:240) 

이 응용 프로그램은 Aqua와 잘 작동합니다. 문제는 JWrapper를 사용하여 기본 .app로 내 보낸 후 Yosemite 대신 Mavericks로 다른 Mac에서 실행했을 때 계속 유지됩니다.

저는 LAF가 강제로 (Aqua, metal 또는 다른 어떤 것) 사용하여 프로그램을 작동 시키려고합니다. 그래서 이것은 약간 문제입니다.

또한 문제는 this과 같지만 제안 된 해결책이 작동하지 않습니다.

답변

1

좋아요. 나는 질문을 올리기로 결정하기 전에이 질문에 1 시간 이상 씨름하고 있습니다. 나는 나중에 대답을 알아 냈다.

private static JLabel... = new JLabel("example"); 
private static JButton...= new JButton("example"); 
//Things up here will display as aqua 


public static void main(String[] args){ 

    try { 
     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     JLabel... =new JLabel("example"); 
     //things down here will display as metal 

어리석은 실수였습니다.