2011-04-07 6 views
4

J'ai une application Java qui exécute parfaitement sous Windows, je vais à la ligne de commande après la construction du projet, exécutez la commandeexécution Java fichier Jar sous Mac OS X

java -jar FileName.jar 

Lorsque j'ai copié les fichiers de projet à ma machine Mac et exécuté la même commande, j'ai l'erreur suivante:

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) 

pourquoi ce qui se passe comme java est censé être portable, peu importe ce que le système d'exploitation sous-jacente est?

Merci

Répondre

5

Salut j'ai vu cela avant voir here une explication

Résumé

Le soleil. * Les forfaits ne font pas partie de l'pris en charge, interface publique. Un programme Java qui appelle directement les paquets sun. * N'est pas garanti pour fonctionner sur toutes les plates-formes compatibles Java. En fait, un tel programme n'est pas garanti de fonctionner même dans les futures versions sur la même plate-forme.

+0

merci .. c'était instructif et utile .. – AhmadAssaf

+0

Vous êtes les bienvenus :) –

4

Apparemment, vous utilisez com.sun.security.auth.module.NTSystem, une API interne qui est disponible uniquement sur les systèmes NT Win.

as java is supposed to be portable no matter what the underlying OS is

Cela est vrai aussi longtemps que vous vous en tenez à java.* et javax.* paquets. Les packages contiennent des API internes, ils ne sont pas disponibles sur les machines virtuelles autres que Sun et beaucoup d'entre eux sont spécifiques à la plate-forme.

+0

Je vous remercie de votre aide. Je pense que mon problème était de démarrer une application de bureau Java dans netbeans, qui importait certaines bibliothèques uniquement disponibles sous Windows. – AhmadAssaf