Запуск файла Java Jar в Mac OS X - PullRequest
4 голосов
/ 07 апреля 2011

У меня есть приложение Java, которое отлично работает под Windows, я захожу в командную строку после построения проекта, выполняю команду

java -jar FileName.jar 

Когда я скопировал файлы проекта на мой компьютер Mac и выполнилта же команда, у меня появляется следующая ошибка:

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/sun/security/auth/module/NTSystem
    at androidchat.AndroidChatView.<init>(AndroidChatView.java:48)
    at androidchat.AndroidChatApp.startup(AndroidChatApp.java:19)
    at org.jdesktop.application.Application$1.run(Application.java:171)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:678)
    at java.awt.EventQueue.access$000(EventQueue.java:86)
    at java.awt.EventQueue$1.run(EventQueue.java:639)
    at java.awt.EventQueue$1.run(EventQueue.java:637)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:648)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.lang.ClassNotFoundException: com.sun.security.auth.module.NTSystem
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

почему это происходит, поскольку Java должна быть переносимой независимо от того, какая ОС лежит ниже?

Спасибо

Ответы [ 2 ]

5 голосов
/ 07 апреля 2011

Привет, я видел это раньше, см. здесь для объяснения

Резюме

Пакеты Sun. * не являются частьюподдерживается, публичный интерфейс.Программа Java, которая напрямую обращается к пакетам sun. *, Не гарантирует работу на всех Java-совместимых платформах.На самом деле, такая программа не гарантирует работу даже в будущих версиях на той же платформе.

4 голосов
/ 07 апреля 2011

Очевидно, вы используете com.sun.security.auth.module.NTSystem, внутренний API, который доступен только в системах на основе Win NT.

поскольку ява должна быть переносимой нет Неважно, что лежит в основе ОС

Это верно, если вы придерживаетесь пакетов java.* и javax.*.
com.sun.* пакеты содержат внутренние API, они недоступны на виртуальных машинах, отличных от Sun, и многие из них зависят от платформы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...