Нечетное исключение Java Swing UI NullPointerException в Windows Server 2003 - PullRequest
1 голос
/ 18 мая 2011

У меня есть приложение Swing, работающее на Java 1.6.0_20 в Windows XP (32-разрядная версия). Я хотел бы опубликовать приложение через Citrix 3.0, работающее на Windows Server 2003. При попытке запустить клиентский jar (с тем же JRE и параметрами, что и в XP, который работает нормально) с сервера, однако, выдается следующее исключение :

    Exception: java.lang.NullPointerException
    Thu May 17 18:52:09 GMT 2011
    java.lang.NullPointerException
        at com.sun.java.swing.plaf.windows.WindowsRadioButtonUI.installDefaults(Unknown Source)
        at com.sun.java.swing.plaf.windows.WindowsCheckBoxUI.installDefaults(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonUI.installUI(Unknown Source)
        at javax.swing.JComponent.setUI(Unknown Source)
        at javax.swing.AbstractButton.setUI(Unknown Source)
        at com.company.aqqs.displayproject.factory.ToggleFieldFactory.newToggleField(ToggleFieldFactory.java:70)
        at com.company.aqqs.displayproject.factory.ToggleFieldFactory.newToggleField(ToggleFieldFactory.java:120)
        at com.company.aqqs.displayproject.factory.ToggleFieldFactory.newToggleField(ToggleFieldFactory.java:156)
        at com.company.aqqs.ui.MainWindow.getqq_FreezeWindow(MainWindow.java:7546)
        at com.company.aqqs.ui.MainWindow.getqq_GridField131657(MainWindow.java:7588)
        at com.company.aqqs.ui.MainWindow.getqq_RefreshPaneGridField(MainWindow.java:7640)
        at com.company.aqqs.ui.MainWindow.getqq_ToolbarGridField(MainWindow.java:8085)
        at com.company.aqqs.ui.MainWindow.getqq_MainGrid(MainWindow.java:11228)
        at com.company.aqqs.ui.MainWindow.getForm(MainWindow.java:11303)
        at com.company.aqqs.ui.MainWindow.initialize(MainWindow.java:11328)
        at com.company.aqqs.ui.BaseWindow.<init>(BaseWindow.java:109)
        at com.company.aqqs.ui.ExWindow.<init>(ExWindow.java:281)
        at com.company.aqqs.ui.MainWindow.<init>(MainWindow.java:435)
        at com.company.aqqs.ui.MainWindow.launch(MainWindow.java:11544)
        at com.company.aqqs.ui.MainWindow.main(MainWindow.java:11557)

Чего-то не хватает в Windows Server 2003, что могло бы вызвать исключение NullPointerException и, что не менее важно, существует ли обходной путь?

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

У меня есть догадка, что это связано с поддерживаемым Look and Feel на каждой платформе, а Windows Server 2003 не полностью поддерживает внешний вид по умолчанию и ощущение, что Java VM использует.

Таким образом, вы программно настраиваете внешний вид

/* Choose one of the L&Fs below. */    
public static void main(String[] args) {
    try {
        // 1. Set System L&F
        UIManager.setLookAndFeel(
            UIManager.getSystemLookAndFeelClassName());
        // 2. or set cross-platform Java L&F (also called "Metal")
        UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
    } 
    catch (UnsupportedLookAndFeelException e) {
       // handle exception
    }
    catch (ClassNotFoundException e) {
       // handle exception
    }
    catch (InstantiationException e) {
       // handle exception
    }
    catch (IllegalAccessException e) {
       // handle exception
    }

    new SwingApplication(); //Create and show the GUI.
}

Вероятно, если явно указать внешний вид и поведение и перехватить любые исключения, это может решить проблему.См. Также Java Tutorials .

. Вы также можете сравнить два Java Runtime на каждой платформе, особенно библиотеки в Runtimeфайлы .jar.

1 голос
/ 18 мая 2011

Я видел подобные ошибки с нулевыми указателями, когда Microsoft что-то изменила в ОС. Наше приложение Java перестает работать после обновления Windows.

Обновление до последней версии JRE исправило эту проблему несколько раз, когда мы сталкивались с ней.

...