ROSE 2003 提示 java.lang.ClassNotFoundException

本文提供了解决ROSE2003启动时出现java.lang.ClassNotFoundException错误的方法,包括修改注册表及替换SHW32.DLL文件等方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 2009-04-20 13:14
安装完ROSE 2003后启动老提示"java.lang.ClassNotFoundException"。并且不能退出,必须用任务管理器结束进程。官方提供的解决方案原文如下:

Problem
Enabling the Web Modeler Add-In in Rose produces a 'java.lang.ClassNotFoundException'

Solution
SYMPTOM:

Activating the Web Modeler add-in gives warning
"java.lang.ClassNotFoundException".
Immediately exiting Rose results in a "java.lang.NullPointerException" warning
and the rose does not respond.

CAUSE:

This is usually due to a broken Microsoft Java VM, but may be due to a missing
Registry entry.

RESOLUTION:

First, confirm that the Windows Registry value "TrustedClasspath" exists under
the key "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Java VM".

This value must exist and contain the file paths:
c:/winnt/java/trustlib/rosedatamodeler.zip;
c:/winnt/java/trustlib/comwrappers.zip;
c:/winnt/java/trustlib/xerces.jar;


Steps:
1. Run RegEdit: use Windows "Start" menu > Run... > type 'regedit' and
hit Enter.

WARNING: RegEdit will let you modify information critical to operating the
computer. Before editing the Registry, make sure you understand how to restore
it if a problem occurs.

For more information see the "Restoring the Registry" Help-topic in RegEdit or
RegEdit32.

2. Browse to "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Java VM"
3. If TrustedClasspath does not exit, create it as a new String Value.
4. If TrustedClasspath does not have the paths listed above, add them to the
list separated by semicolons.

EXAMPLE:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Java VM
TrustedClasspath [REG_SZ]
= "c:/winnt/java/trustlib/rosedatamodeler.zip;
c:/winnt/java/trustlib/comwrappers.zip;
c:/winnt/java/trustlib/xerces.jar;"

5. Run Rose and turn on the Web Modeler add-in using the Add-In Manager

以上的官方解决方案是在Windows Server 2003下的解决办法,现总结在windows xp/2000下的解决办法:
方法一:下载SHW32.DLL文件覆盖Rose 2003中的该原文件即可。  
用shw32.dll文件覆盖安装目录下同名文件。这个文件默认在在c:/Program Files/Rational/Common目录下.

方法二:修改注册表
 1.打开注册表  
 2.定位到"HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Java VM"   
3.新建项TrustedClasspath [REG_SZ](字符串值)   
4.其数值数据为    (1)windows 2000     "c:/winnt/java/trustlib/rosedatamodeler.zip;c:/winnt/java/trustlib/comwrappers.zip;c:/winnt/java/trustlib/xerces.jar;"    (2)windows xp    "C:/WINDOWS/java/trustlib/RoseDataModeler.zip;C:/WINDOWS/java/trustlib/comwrappers.zip;C:/WINDOWS/java/trustlib/xerces.jar;“ 5.重新运行Rose,在"Add-In Manager"选项卡中选中"Web Modeler add-in using

 

 

 

 

 

 

我试过了方法一后又用方法二才解决的。

`java.lang.ClassNotFoundException` 是 Java 中常见的异常之一,表示运行时无法找到指定的类。当抛出 `java.lang.reflect.InaccessibleObjectException` 时,通常是因为尝试访问或修改一个不可访问的类成员(如私有字段或方法),并且未通过 `setAccessible(true)` 来绕过 Java 的访问控制检查。 如果出现 `ClassNotFoundException` 指向 `java.lang.reflect.InaccessibleObjectException`,则可能是以下原因导致: ### 原因分析 1. **JVM 版本不兼容** 在某些旧版本的 JVM 中,`InaccessibleObjectException` 可能不存在,或者其所在的模块未被正确加载。例如,Java 9 引入了模块系统(JPMS),部分反射相关的类可能需要显式声明依赖[^1]。 2. **类路径问题** 如果应用程序试图通过自定义类加载器加载类,但类路径配置错误,可能导致核心类如 `InaccessibleObjectException` 无法找到。这在使用隔离类加载环境(如 OSGi 或某些容器)时尤为常见[^1]。 3. **安全策略限制** 在启用安全管理器的情况下,某些类加载操作可能被阻止,导致 `InaccessibleObjectException` 被抛出,而该类本身又未能正确加载,从而引发 `ClassNotFoundException`。 4. **混淆工具或 AOT 编译问题** 使用 ProGuard、GraalVM Native Image 等工具时,若未正确保留反射所需的类和方法,可能导致运行时找不到 `InaccessibleObjectException` 类[^1]。 ### 解决方案 1. **确保 JVM 兼容性** 确保运行环境的 Java 版本与编译环境一致,并且支持所需类。对于 Java 9 及以上版本,确认是否启用了适当的模块(如 `--add-modules java.base`)。 2. **检查类加载机制** 避免使用非标准类加载器加载核心类。如果必须使用自定义类加载器,应确保其委托给父类加载器以保证核心类的可用性。 3. **更新安全管理策略** 如果启用了安全管理器,添加适当的权限允许类加载和反射操作: ```java grant { permission java.lang.RuntimePermission "accessDeclaredMembers"; permission java.lang.reflect.ReflectPermission "suppressAccessChecks"; }; ``` 4. **调整构建工具配置** 如果使用了代码混淆或提前编译工具,确保保留必要的反射类和方法。例如,在 GraalVM Native Image 配置中添加: ```json { "name": "java.lang.reflect.InaccessibleObjectException", "allDeclaredConstructors": true, "allPublicMethods": true } ``` 5. **避免不必要的反射操作** 如果应用逻辑中频繁使用反射来访问私有成员,考虑重构代码以使用公共 API 或设计模式,减少对 `setAccessible(true)` 的依赖。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值