我有一个在windows下完美运行的Java应用程序,我在构建项目后转到命令行,执行命令
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都应该是可移植的?
由于
答案 0 :(得分:5)
嘿,我在看到here之前已经看到了这个解释
<强>摘要强>
sun。*包不是受支持的公共界面的一部分。 直接调用sun。*包的Java程序不能保证在所有兼容Java的平台上运行。实际上,即使在同一平台上的未来版本中,也不能保证这样的程序能够工作。
答案 1 :(得分:4)
显然你使用的是com.sun.security.auth.module.NTSystem
,这是一个只在基于Win NT的系统上可用的内部API。
因为java应该是可移植的 无论底层操作系统是什么
只要您坚持使用java.*
和javax.*
个套餐,就属实
com.sun.*
个软件包包含内部API,它们在非Sun VM上不可用,其中许多都是特定于平台的。