java 多线程 调用 dll 出错,JAVA调用DLL异常,请高手寻找异常原因,给出解决方法...

当前位置:我的异常网» J2SE » JAVA调用DLL异常,请高手寻找异常原因,给出解决方法

JAVA调用DLL异常,请高手寻找异常原因,给出解决方法

www.myexceptions.net  网友分享于:2013-09-05  浏览:122次

JAVA调用DLL错误,请高手寻找错误原因,给出解决办法

以下为错误日志

#

# An unexpected error has been detected by Java Runtime Environment:

#

# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x765ee26f, pid=4044, tid=780

#

# Java VM: Java HotSpot(TM) Client VM (1.6.0-b105 mixed mode)

# Problematic frame:

# C [CRYPT32.dll+0xe26f]

#

# If you would like to submit a bug report, please visit:

# http://java.sun.com/webapps/bugreport/crash.jsp

#

--------------- T H R E A D ---------------

Current thread (0x00306000): JavaThread "main" [_thread_in_native, id=780]

siginfo: ExceptionCode=0xc0000005, reading address 0x00000044

Registers:

EAX=0x00000000, EBX=0x00000000, ECX=0x77db7f61, EDX=0x00000000

ESP=0x0094e800, EBP=0x0094e80c, ESI=0x00000000, EDI=0x00000044

EIP=0x765ee26f, EFLAGS=0x00010246

Top of Stack: (sp=0x0094e800)

0x0094e800: 00000000 7660178d 00000000 0094e818

0x0094e810: 765ee2ef 00000000 0094e830 766017af

0x0094e820: 00000000 00000000 765ec7f8 00000000

0x0094e830: 0c1f48d0 0c1d2c97 00000000 00000000

0x0094e840: 0c2107b3 0c1f48d0 00000000 0c1f48d0

0x0094e850: 00306000 02bb8088 6d7c8256 00000001

0x0094e860: 02bb8058 ffffffff 00000004 0094e908

0x0094e870: 00000001 6d960a91 0094e8a8 00a26114

Instructions: (pc=0x765ee26f)

0x765ee25f: 90 90 8b ff 55 8b ec 53 56 8b 75 08 57 8d 7e 44

0x765ee26f: 8b 07 33 db 3b c3 0f 85 0a b8 00 00 83 3e 03 75

Stack: [0x00900000,0x00950000), sp=0x0094e800, free space=314k

Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)

C [CRYPT32.dll+0xe26f]

C [CRYPT32.dll+0xe2ef]

C [CRYPT32.dll+0x217af]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)

j cn.com.jit.assp.dsign.jni.DSignJNI.SetCert(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I+0

j com.cfcc.jaf.common.cautil.CAClientUtil.SetCertChooseType(I)V+78

j com.cf.kk.client.login.KKLoginModel.login()Z+70

j com.cf.kk.client.login.KKLoginDialog.buttonPressed(I)V+165

j org.eclipse.jface.dialogs.Dialog$3.widgetSelected(Lorg/eclipse/swt/events/SelectionEvent;)V+17

j org.eclipse.swt.widgets.TypedListener.handleEvent(Lorg/eclipse/swt/widgets/Event;)V+198

J org.eclipse.swt.widgets.EventTable.sendEvent(Lorg/eclipse/swt/widgets/Event;)V

j org.eclipse.swt.widgets.Widget.sendEvent(Lorg/eclipse/swt/widgets/Event;)V+25

j org.eclipse.swt.widgets.Display.runDeferredEvents()Z+84

j org.eclipse.swt.widgets.Display.readAndDispatch()Z+55

j org.eclipse.jface.window.Window.runEventLoop(Lorg/eclipse/swt/widgets/Shell;)V+23

j org.eclipse.jface.window.Window.open()I+49

j com.cf.kk.client.Application.login(Lorg/eclipse/swt/widgets/Display;)Z+25

j com.cf.kk.client.Application.run(Ljava/lang/Object;)Ljava/lang/Object;+16

j org.eclipse.core.internal.runtime.PlatformActivator$1.run(Ljava/lang/Object;)Ljava/lang/Object;+219

j org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(Ljava/lang/Object;)Ljava/lang/Object;+103

j org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(Ljava/lang/Object;)Ljava/lang/Object;+29

j org.eclipse.core.runtime.adaptor.EclipseStarter.run(Ljava/lang/Object;)Ljava/lang/Object;+135

j org.eclipse.core.runtime.adaptor.EclipseStarter.run([Ljava/lang/String;Ljava/lang/Runnable;)Ljava/lang/Object;+60

v ~StubRoutines::call_stub

j sun.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+0

j sun.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+87

j sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+6

j java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+161

文章评论

Java多线程可以调用DLL(Dynamic-Link Library)来进行一些特定操作。 首先,在Java调用DLL需要使用到Java Native Interface(JNI)技术。JNI是Java提供的一种机制,用于在Java程序中调用本地的C/C++代码。通过JNI,我们可以在Java程序中加载和调用DLL中的函数。 在多线程调用DLL的过程如下: 1. 首先,在Java中编写一个JNI的接口类,用于定义与DLL中函数的映射关系。这个接口类需要使用Java的native关键字来声明与DLL中函数对应的本地方法。 2. 在DLL中实现与接口类中声明的本地方法对应的C/C++函数。这些函数可以通过DLL导出符号的方式供Java程序调用。 3. 在Java程序中加载DLL调用其中的函数。 使用多线程调用DLL时,需要注意以下几点: 1. 线程安全性:在多线程环境下调用DLL时,需要确保DLL中的函数是线程安全的,即能够正确处理多个线程间的共享数据。 2. 同步控制:如果DLL中的函数需要访问共享资源,需要在Java程序中使用同步控制机制,如synchronized关键字或Lock对象来确保线程之间的互斥访问。 3. 线程间通信:如果多个线程需要相互通信,可以通过共享内存或消息传递的方式实现。在DLL中可以使用线程同步的机制来实现线程间的互斥、等待和通知操作。 总之,Java多线程可以通过JNI技术调用DLL来完成一些底层的特定操作。在进行多线程调用DLL时,需要保证线程安全性,确保合适的同步控制和线程间通信方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值