设置环境变量
classpath=.;jdk安装目录\lib

解决方案 »

  1.   

    我编译和运行几十个程序了,运行其他的都好用,可一运行这个 java文件就出现这问题,请问原因是什么?
      

  2.   

    首先要看一下你的classpath设置的对不对,另外,以下的网址你可以去看看:
      http://www.chinajavaworld.com/java/native/Native.htm
    不知有用否?
      

  3.   

    我是想用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 __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.真不明白是那的问题。
      

  4.   

    mfc42.dll出问题了,非法内存操作
    检查检查你的c程序
      

  5.   

    我不管你后面的问题,最前面的问题,就是没找到类,因为你根本没用Java 文件,你的文件或者文件没带包.或者文件存放路径不对,请仔细确认!
      

  6.   

    根据所报错误的提示,就是没有找到类,这种错误我也遇到过,不过有Java调用动态联结库,这种用法没有试过。
    我想,可能是JDK找不到dll文件吧,还是哪里需要设置?这种问题专业性太强,没有做过的人肯定不知所然,你最好找相关的书籍看一下^o^