在Mac OS X上运行Java Jar文件

4

我有一个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

你好,我之前见过这个,可以在这里看到说明。

概要

sun.*包不是受支持的公共接口的一部分。直接调用sun.*包的Java程序不能保证在所有Java兼容平台上工作。实际上,这样的程序甚至不能保证在同一平台的未来版本上工作。


4
显然,您正在使用 com.sun.security.auth.module.NTSystem,这是一种仅在基于Win NT的系统上可用的内部API。

由于Java应该是可移植的,无论底层操作系统如何。

只要您坚持使用java.*javax.*包,就可以实现这一点。
com.sun.*包含内部API,它们在非Sun VM上不可用,并且其中许多是特定于平台的。

谢谢,那真的很有帮助。我想我的问题是选择在NetBeans中启动Java桌面应用程序,导入了一些仅在Windows下可用的库。 - AhmadAssaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接