问个低级的问题,我编译的时候没问题,可运行时候出现如下提示:Exception in thread "main" java.lang.NoClassDefFoundError: NativeDem 设置环境变量classpath=.;jdk安装目录\lib 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我编译和运行几十个程序了,运行其他的都好用,可一运行这个 java文件就出现这问题,请问原因是什么? 首先要看一下你的classpath设置的对不对,另外,以下的网址你可以去看看: http://www.chinajavaworld.com/java/native/Native.htm不知有用否? 我是想用java 调用vc的动态库文件,目的是从java传一个整数给vc的动态库文件JNFP_YD,由vc的动态库JNFP_YD的函数JNGetFPError()其返回相应的汉字串给java.1,java源文件:import java.lang.*;import java.io.*;import java.util.*;public class NativeDemo{ public static void main(String args[]) { int i=1; NativeDemo ob = new NativeDemo(); String ls=ob.JNGetFPError(i); System.out.println("this is test:"+ls); } public native String JNGetFPError(int nErrorCode); static { System.loadLibrary("Dllsam"); }}2,NativeDeom.h文件如下:/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class NativeDemo */#ifndef _Included_NativeDemo#define _Included_NativeDemo#ifdef __cplusplusextern "C" {#endif/* * Class: NativeDemo * Method: JNGetFPError * Signature: (I)Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_NativeDemo_JNGetFPError (JNIEnv *, jobject, jint);#ifdef __cplusplus}#endif#endif3,Dllsam.cpp文件如下:#include "stdAfx.h"#include "atlconv.h"#include "nativedemo.h"#include <stdio.h>JNIEXPORT jstring JNICALL Java_NativeDemo_JNGetFPError(JNIEnv *env, jobject jo, jint jin){ int m=jin; LPCTSTR ls= NULL; typedef LPTSTR(CALLBACK* LPFNDLLFUNC6)(int); HINSTANCE hDLL; // Handle to DLL LPFNDLLFUNC6 lpfnDllFunc6; hDLL = LoadLibrary("JNFP_YD");//调用另一个动态库文件JNFP_YD。 if (hDLL != NULL) { lpfnDllFunc6 = (LPFNDLLFUNC6)GetProcAddress(hDLL,"JNGetFPError");//动态库JNFP_YD的一个函数。 if (!lpfnDllFunc6) { FreeLibrary(hDLL); return NULL; } else { ls=lpfnDllFunc6(m); jstring rtn = 0; int slen = strlen(ls); wchar_t* buffer = 0; char *b= new char[128]; strcpy(b, ls); if( slen == 0 ) { rtn = env->NewStringUTF( b ); } else { int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)ls, slen, NULL, 0 ); buffer = (wchar_t*)malloc( length*2 + 1 ); if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)ls, slen, (LPWSTR)buffer, length ) >0 ) rtn = env->NewString( (jchar*)buffer, length ); } if( buffer ) free( buffer ); return rtn; } } } 注意的是: 动态库JNFP_YD不是我的,是别人给我现成的,叫我调用,我自己做的动态库好用,可他的不好用,难道是他的动态库函数有问题,可是我的同事说用vb调用其动态函数一点问题没有,这到底是那的问题。 我在 classpath设置了classpath=.;jdk安装目录\lib,就没有Exception in thread "main" java.lang.NoClassDefFoundError: NativeDemo 这错误了,可是一运行程序,却出现如下的问题了:C:\inttocharcompany>java NativeDemoAn unexpected exception has been detected in native code outside the VM.Unexpected Signal : EXCEPTION_ACCESS_VIOLATION occurred at PC=0x6bc43ec4Function name=Ordinal535Library=C:\WINNT\system32\MFC42.DLLCurrent Java thread: at NativeDemo.JNGetFPError(Native Method) at NativeDemo.main(NativeDemo.java:15)Dynamic libraries:0x00400000 - 0x00405000 C:\WINNT\system32\java.exe0x77F80000 - 0x77FFB000 C:\WINNT\System32\ntdll.dll0x77D90000 - 0x77DEB000 C:\WINNT\system32\ADVAPI32.dll0x77E60000 - 0x77F34000 C:\WINNT\system32\KERNEL32.DLL0x77D20000 - 0x77D90000 C:\WINNT\system32\RPCRT4.DLL0x78000000 - 0x78046000 C:\WINNT\system32\MSVCRT.dll0x20000000 - 0x20026000 D:\ra\rav\Memmon.dll0x77DF0000 - 0x77E54000 C:\WINNT\system32\USER32.dll0x77F40000 - 0x77F7C000 C:\WINNT\system32\GDI32.DLL0x75E00000 - 0x75E1A000 C:\WINNT\System32\IMM32.DLL0x6D420000 - 0x6D4EF000 D:\jbuilder\jdk1.3.1\jre\bin\hotspot\jvm.dl0x77530000 - 0x77560000 C:\WINNT\system32\WINMM.dll0x6D220000 - 0x6D227000 D:\jbuilder\jdk1.3.1\jre\bin\hpi.dll0x6D3B0000 - 0x6D3BD000 D:\jbuilder\jdk1.3.1\jre\bin\verify.dll0x6D250000 - 0x6D266000 D:\jbuilder\jdk1.3.1\jre\bin\java.dll0x6D3C0000 - 0x6D3CD000 D:\jbuilder\jdk1.3.1\jre\bin\zip.dll0x10000000 - 0x1001B000 C:\inttocharcompany\zhpprogramtest\Dllsam.d0x5F400000 - 0x5F4E5000 C:\WINNT\system32\MFC42D.DLL0x10200000 - 0x10260000 C:\WINNT\system32\MSVCRTD.dll0x6BC20000 - 0x6BC2D000 C:\WINNT\System32\MFC42LOC.DLL0x08FD0000 - 0x08FD8000 C:\inttocharcompany\zhpprogramtest\JNFP_YD.0x6BC40000 - 0x6BD32000 C:\WINNT\system32\MFC42.DLL0x08FE0000 - 0x090AF000 C:\inttocharcompany\zhpprogramtest\jinnuo.d0x090B0000 - 0x090C7000 C:\inttocharcompany\zhpprogramtest\VFPSImg.0x090D0000 - 0x090D9000 C:\inttocharcompany\zhpprogramtest\VFPS.dll0x090E0000 - 0x090FA000 C:\inttocharcompany\zhpprogramtest\kyQual.d0x78080000 - 0x78095000 C:\WINNT\system32\MSVCRT40.dll0x780A0000 - 0x780B2000 C:\WINNT\system32\MSVCIRT.dll0x77900000 - 0x77923000 C:\WINNT\system32\imagehlp.dll0x72960000 - 0x7298D000 C:\WINNT\system32\DBGHELP.dll0x731B0000 - 0x731BA000 C:\WINNT\system32\PSAPI.DLLLocal Time = Sun Aug 18 15:42:02 2002Elapsed Time = 2## The exception above was detected in native code outside the VM## Java VM: Java HotSpot(TM) Client VM (1.3.1-b24 mixed mode)## An error report file has been saved as hs_err_pid1176.log.# Please refer to the file for further information.真不明白是那的问题。 mfc42.dll出问题了,非法内存操作检查检查你的c程序 我不管你后面的问题,最前面的问题,就是没找到类,因为你根本没用Java 文件,你的文件或者文件没带包.或者文件存放路径不对,请仔细确认! 根据所报错误的提示,就是没有找到类,这种错误我也遇到过,不过有Java调用动态联结库,这种用法没有试过。我想,可能是JDK找不到dll文件吧,还是哪里需要设置?这种问题专业性太强,没有做过的人肯定不知所然,你最好找相关的书籍看一下^o^ java容器的一习题!!初学者! 请教一个关于日期的问题 oracle的编码的必须为AMERICAN_AMERICA.US7ASCII,用hibernate,写入和读出都是乱码 目录树问题求助。在线等!~ transient关键字有什么用?最好有小例子参考一下 一个布局管理器问题 java要考试了,谈点容易错的地方吧 在运行hello word,程序是出现的问题,请帮忙? jdbc与事物处理? 新手自学JAVA 求几本好的简单易懂的电子书 java比C++好在那里?人的精力是有限的 一个DNS解析的问题
http://www.chinajavaworld.com/java/native/Native.htm
不知有用否?
import java.io.*;
import java.util.*;public class NativeDemo
{
public static void main(String args[])
{
int i=1;
NativeDemo ob = new NativeDemo();
String ls=ob.JNGetFPError(i);
System.out.println("this is test:"+ls);
}
public native String JNGetFPError(int nErrorCode);
static
{
System.loadLibrary("Dllsam");
}}
2,NativeDeom.h文件如下:/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class NativeDemo */#ifndef _Included_NativeDemo
#define _Included_NativeDemo
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: NativeDemo
* Method: JNGetFPError
* Signature: (I)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_NativeDemo_JNGetFPError
(JNIEnv *, jobject, jint);#ifdef __cplusplus
}
#endif
#endif3,Dllsam.cpp文件如下:#include "stdAfx.h"
#include "atlconv.h"
#include "nativedemo.h"
#include <stdio.h>JNIEXPORT jstring JNICALL Java_NativeDemo_JNGetFPError
(JNIEnv *env, jobject jo, jint jin)
{ int m=jin;
LPCTSTR ls= NULL;
typedef LPTSTR(CALLBACK* LPFNDLLFUNC6)(int);
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC6 lpfnDllFunc6;
hDLL = LoadLibrary("JNFP_YD");//调用另一个动态库文件JNFP_YD。
if (hDLL != NULL)
{
lpfnDllFunc6 = (LPFNDLLFUNC6)GetProcAddress(hDLL,"JNGetFPError");//动态库JNFP_YD的一个函数。
if (!lpfnDllFunc6)
{
FreeLibrary(hDLL);
return NULL;
}
else
{
ls=lpfnDllFunc6(m);
jstring rtn = 0;
int slen = strlen(ls);
wchar_t* buffer = 0;
char *b= new char[128];
strcpy(b, ls);
if( slen == 0 )
{
rtn = env->NewStringUTF( b );
}
else
{
int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)ls, slen, NULL, 0 );
buffer = (wchar_t*)malloc( length*2 + 1 );
if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)ls, slen, (LPWSTR)buffer, length ) >0 )
rtn = env->NewString( (jchar*)buffer, length );
}
if( buffer )
free( buffer );
return rtn;
}
}
} 注意的是:
动态库JNFP_YD不是我的,是别人给我现成的,叫我调用,我自己做的动态库好用,可他的不好用,难道是他的动态库函数有问题,可是我的同事说用vb调用其动态函数一点问题没有,这到底是那的问题。 我在 classpath设置了classpath=.;jdk安装目录\lib,就没有
Exception in thread "main" java.lang.NoClassDefFoundError: NativeDemo 这错误了,可是一运行程序,却出现如下的问题了:
C:\inttocharcompany>java NativeDemoAn unexpected exception has been detected in native code outside the VM.
Unexpected Signal : EXCEPTION_ACCESS_VIOLATION occurred at PC=0x6bc43ec4
Function name=Ordinal535
Library=C:\WINNT\system32\MFC42.DLLCurrent Java thread:
at NativeDemo.JNGetFPError(Native Method)
at NativeDemo.main(NativeDemo.java:15)Dynamic libraries:
0x00400000 - 0x00405000 C:\WINNT\system32\java.exe
0x77F80000 - 0x77FFB000 C:\WINNT\System32\ntdll.dll
0x77D90000 - 0x77DEB000 C:\WINNT\system32\ADVAPI32.dll
0x77E60000 - 0x77F34000 C:\WINNT\system32\KERNEL32.DLL
0x77D20000 - 0x77D90000 C:\WINNT\system32\RPCRT4.DLL
0x78000000 - 0x78046000 C:\WINNT\system32\MSVCRT.dll
0x20000000 - 0x20026000 D:\ra\rav\Memmon.dll
0x77DF0000 - 0x77E54000 C:\WINNT\system32\USER32.dll
0x77F40000 - 0x77F7C000 C:\WINNT\system32\GDI32.DLL
0x75E00000 - 0x75E1A000 C:\WINNT\System32\IMM32.DLL
0x6D420000 - 0x6D4EF000 D:\jbuilder\jdk1.3.1\jre\bin\hotspot\jvm.dl
0x77530000 - 0x77560000 C:\WINNT\system32\WINMM.dll
0x6D220000 - 0x6D227000 D:\jbuilder\jdk1.3.1\jre\bin\hpi.dll
0x6D3B0000 - 0x6D3BD000 D:\jbuilder\jdk1.3.1\jre\bin\verify.dll
0x6D250000 - 0x6D266000 D:\jbuilder\jdk1.3.1\jre\bin\java.dll
0x6D3C0000 - 0x6D3CD000 D:\jbuilder\jdk1.3.1\jre\bin\zip.dll
0x10000000 - 0x1001B000 C:\inttocharcompany\zhpprogramtest\Dllsam.d
0x5F400000 - 0x5F4E5000 C:\WINNT\system32\MFC42D.DLL
0x10200000 - 0x10260000 C:\WINNT\system32\MSVCRTD.dll
0x6BC20000 - 0x6BC2D000 C:\WINNT\System32\MFC42LOC.DLL
0x08FD0000 - 0x08FD8000 C:\inttocharcompany\zhpprogramtest\JNFP_YD.
0x6BC40000 - 0x6BD32000 C:\WINNT\system32\MFC42.DLL
0x08FE0000 - 0x090AF000 C:\inttocharcompany\zhpprogramtest\jinnuo.d
0x090B0000 - 0x090C7000 C:\inttocharcompany\zhpprogramtest\VFPSImg.
0x090D0000 - 0x090D9000 C:\inttocharcompany\zhpprogramtest\VFPS.dll
0x090E0000 - 0x090FA000 C:\inttocharcompany\zhpprogramtest\kyQual.d
0x78080000 - 0x78095000 C:\WINNT\system32\MSVCRT40.dll
0x780A0000 - 0x780B2000 C:\WINNT\system32\MSVCIRT.dll
0x77900000 - 0x77923000 C:\WINNT\system32\imagehlp.dll
0x72960000 - 0x7298D000 C:\WINNT\system32\DBGHELP.dll
0x731B0000 - 0x731BA000 C:\WINNT\system32\PSAPI.DLLLocal Time = Sun Aug 18 15:42:02 2002
Elapsed Time = 2
#
# The exception above was detected in native code outside the VM
#
# Java VM: Java HotSpot(TM) Client VM (1.3.1-b24 mixed mode)
#
# An error report file has been saved as hs_err_pid1176.log.
# Please refer to the file for further information.真不明白是那的问题。
检查检查你的c程序
我想,可能是JDK找不到dll文件吧,还是哪里需要设置?这种问题专业性太强,没有做过的人肯定不知所然,你最好找相关的书籍看一下^o^