有人知道我如何在JBOSS 7.1 servelet中直接使用sun.awt命名空间下的类吗?

有人知道我如何在JBOSS 7.1 servelet中直接使用sun.awt命名空间下的类吗?,jboss,noclassdeffounderror,Jboss,Noclassdeffounderror,我们有一位客户,他创建了一个Servlet,托管在Windows7 64位的JBoss7.1中,Servlet使用我们开发的jar文件中的java类。我们的一个类使用sun.awt.DisplayChangedListener接口。问题是,调用Servlet时,我们从使用DisplayChangedListener的类中获得NoClassDefFoundError异常,DisplayChangedListener是根本原因。DisplayChangedListener所在的同一rt.jar文件中

我们有一位客户,他创建了一个Servlet,托管在Windows7 64位的JBoss7.1中,Servlet使用我们开发的jar文件中的java类。我们的一个类使用sun.awt.DisplayChangedListener接口。问题是,调用Servlet时,我们从使用DisplayChangedListener的类中获得NoClassDefFoundError异常,DisplayChangedListener是根本原因。DisplayChangedListener所在的同一rt.jar文件中的许多其他类没有问题。我使用process explorer查看JBOSS进程加载的jar文件,其中只有一个rt.jar文件。如果我直接使用java运行相同的代码,我没有问题。如果我将rt.jar文件的副本放在JBOSS中部署的servelet应用程序的本地存储库中,也不会有问题。我知道sun.awt名称空间下的类应该在内部使用,而不是由开发人员使用,而且JBOSS类加载器似乎重新限制了它们的使用。有没有什么方法可以让它在不使用rt.jar的本地副本和不放弃DisplayChangedListener接口的情况下工作,比如通过配置文件中的一些设置


提前感谢您的帮助。

我建议您采取以下步骤:

创建一个新模块 添加以下依赖项,并对所需的包进行编辑 使您的应用程序依赖于模块。
不要介意sun.*的使用,为什么您要在Web应用程序中使用AWT类?您能解释一下为什么您的客户在servlet中使用AWT,以及为什么他们使用受限和非官方的AWT API吗?我知道我们不应该直接使用sun.AWT.*中的任何类。问题是,使用sun.awt.*类的库已经提供给我们的客户将近2年了,我试图看看是否有办法解决这些问题,以满足那些不想等待/升级到下一版本的客户的需要。 ... <dependencies> <system export="true"> <paths> <path name="com/sun"/> <path name="com/sun/net/ssl/internal/ssl"/> </paths> </system> <module name="javax.api"/> <module name="org.apache.log4j"/> <module name="sun.jdk" export="true"/> </dependencies>