SOS!请教大家一个JNI问题了。

xuyun11141 2005-04-25 04:56:00
我写了JNI类(Registry类)调用VC写的DLL,是读写注册表的,我先在第一个JSP页面里用代码如下:
Registry register = null;
register = new Registry():
.
.
.
register.setValue("FirstName","song");

.
.
.

然后在第二个而面里读出上面的值。
Registry register = null;
register = new Registry():




String firstName = null;
firstName = register.getValue("FirstName");

.
.
.
这时就出现java.lang.UnstatifiedLinkError:Native:c:\WINNT\System 32\Registry.dll already loaded in another class loader.
我将第一步的register保存在Session里面也无济于是,
请各位大虾帮助了。
...全文
190 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuyun11141 2005-05-17
  • 打赏
  • 举报
回复
出现这种请况时只要忽略就行了
bevin1010 2005-04-30
  • 打赏
  • 举报
回复
晕,再来!你new了一个对象肯定不行,因为这样他又会加载那个library。
public class B {
private A a ;
public String getContractor( String s_privateid )
throws PR_APIException {
return a.getContractor( String s_privateid );
}
}
xuyun11141 2005-04-29
  • 打赏
  • 举报
回复
敬请各位大虾继续光临啊。
xuyun11141 2005-04-29
  • 打赏
  • 举报
回复
To bevin1010(醒客之路) 大哥:

我把你的类改下如下,用后仍然出现问题。
public class B {
A a = new A():
public String getContractor( String s_privateid )
throws PR_APIException {
return a.getContractor( String s_privateid );
}
}
分另在一JSP页面和Servlet里调用(用如下代码)
B b = new B()
b.getContractor(string);
但还是出现同样的问题。
请继续帮助,不胜感激。
bevin1010 2005-04-29
  • 打赏
  • 举报
回复
哦,上面方法写错了!
public class B {
public String getContractor( String s_privateid )
throws PR_APIException {
return A.getContractor( String s_privateid );
}
}
bevin1010 2005-04-29
  • 打赏
  • 举报
回复
比如现在你有用C写的来访问数据库操作方面类,你编译成了.dll。
现在你要用java来访问这种方法!首先在java类里用static方法加载.dll文件。然后写一些本地方法,这些方法就是用C写方法,没有方法体。再写一个类具体操作的类,这些类与刚才写的类的方法相同,只是返回刚才写的那个类的方法。
如:
public class A{
public native String getContractor( String s_privateid ) throws PR_APIException ;
static {
System.loadLibrary( "XXX_Jni" ) ;
}
}
public class B {
public native String getContractor( String s_privateid )
throws PR_APIException {
return A.getContractor( String s_privateid );
}
}
xuyun11141 2005-04-29
  • 打赏
  • 举报
回复
请问 jFresH_MaN(听说距离产生美,所以我将离开你!) 大哥及 bevin1010(醒客之路):
能否说详细些,能否讲一下如设计这两个及在什么情况下有那个Load Dll的类。谢谢。
bevin1010 2005-04-28
  • 打赏
  • 举报
回复
用一个类来加载,放在static方法里面。
再用一类来重写本地方法!再用其它类来调用前者的方法。OK!
ChDw 2005-04-28
  • 打赏
  • 举报
回复
如果你的是一个Web应用,可能出现由于 Web模块动态更新了,结果造成不断的圆形这个Registry类的问题
jFresH_MaN 2005-04-28
  • 打赏
  • 举报
回复
我上面也说了啊!
使用一个类来加载,并且放在static块里面
那么你要使用这个dll就调用这个类对象就行了
xuyun11141 2005-04-28
  • 打赏
  • 举报
回复
可我在几个地方要用它到,这几调用是没用顺序的
oyljerry 2005-04-27
  • 打赏
  • 举报
回复
一次加载,多次调用函数
飞行的兔子 2005-04-27
  • 打赏
  • 举报
回复
不可能啊,我没遇到这种状况,你最好将这个dll文件放到System32目录或者classpath下,不要同时放入两个目录下!
xuyun11141 2005-04-27
  • 打赏
  • 举报
回复
再顶了。
xuyun11141 2005-04-27
  • 打赏
  • 举报
回复
自己顶了,争取在不得到答案前不要让它沉下去。
xuyun11141 2005-04-27
  • 打赏
  • 举报
回复
我现在在不同的JSP页面里要调用这个类,每次在一个不同的页面调用的时候就出这样Excpetion,不知道如何是好。

请各位大虾出些详细的点子才好啊。
jFresH_MaN 2005-04-25
  • 打赏
  • 举报
回复
楼主如果就在一个类里面加载了类就要用上面的方法,呵呵
如果是有两个类就调整到一个类里面去
xuyun11141 2005-04-25
  • 打赏
  • 举报
回复
哦,不好意思,COPY的时候把static 掉了,我的类就是如楼上zhutouzip 所示。
飞行的兔子 2005-04-25
  • 打赏
  • 举报
回复
把你的registry类改成
public class Registry
{
{
static{
try
{
System.loadLibrary("MseReg");
}
catch(SecurityException e)
{
e.printStackTrace();
}
catch(UnsatisfiedLinkError e)
{
e.printStackTrace();
}
}
}



}
将加载dll文件的代码放在static块中!
parol2910 2005-04-25
  • 打赏
  • 举报
回复
支持民工。。。
加载更多回复(5)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧