当前位置: 技术问答>java相关
我用java调用*.dll的时候为什么结果没出来呢,高手你们看看啊,急急急急!!!!!!!!
来源: 互联网 发布时间:2015-07-31
本文导语: 我用java 调用*.dll的问题。 第一步:生成NativeDemo.java文件 代码: import java.lang.*; import java.io.*; import java.util.*; public class NativeDemo { int i; int j; public static void main(String args[]) { ...
我用java 调用*.dll的问题。
第一步:生成NativeDemo.java文件
代码:
import java.lang.*;
import java.io.*;
import java.util.*;
public class NativeDemo
{
int i;
int j;
public static void main(String args[])
{
NativeDemo ob = new NativeDemo();
ob.i = 10;
System.out.println("this is ob.i:"+ob.i+"n");
}
public native int test();
static
{
System.loadLibrary("Dllsam");
}
}
编译没错误。
第二步: 用javah 生成 NativeDemo.h文件
代码如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class NativeDemo */
#ifndef _Included_NativeDemo
#define _Included_NativeDemo
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: NativeDemo
* Method: test
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_NativeDemo_test
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
第三步: 编写文件test2.cpp 实现 NativeDemo.h文件中的方法:
代码如下:
#include "stdafx.h"
#include "nativedemo.h"
#include
JNIEXPORT jint JNICALL Java_NativeDemo_test(JNIEnv *, jobject)
{
printf("hello:!n");
printf("this is in the native method!n");
return 0;
}
第四步:用VC的动态连接库工程生成动态库文件,把 NativeDemo.h和test2.cpp文件生成 Dllsam.dll, 生成成功,
第五步:把Dllsam.dll放在 和NativeDemo.class同一目录下。
第六步:运行结果: java NativeDemo
结果是: this is ob.i:10
请问正确结果该是 hello:!
this is in the native method!
this is ob.i:10
为什么调用动态库的东西没出来,你们帮我看看,我十分着急。
第一步:生成NativeDemo.java文件
代码:
import java.lang.*;
import java.io.*;
import java.util.*;
public class NativeDemo
{
int i;
int j;
public static void main(String args[])
{
NativeDemo ob = new NativeDemo();
ob.i = 10;
System.out.println("this is ob.i:"+ob.i+"n");
}
public native int test();
static
{
System.loadLibrary("Dllsam");
}
}
编译没错误。
第二步: 用javah 生成 NativeDemo.h文件
代码如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class NativeDemo */
#ifndef _Included_NativeDemo
#define _Included_NativeDemo
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: NativeDemo
* Method: test
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_NativeDemo_test
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
第三步: 编写文件test2.cpp 实现 NativeDemo.h文件中的方法:
代码如下:
#include "stdafx.h"
#include "nativedemo.h"
#include
JNIEXPORT jint JNICALL Java_NativeDemo_test(JNIEnv *, jobject)
{
printf("hello:!n");
printf("this is in the native method!n");
return 0;
}
第四步:用VC的动态连接库工程生成动态库文件,把 NativeDemo.h和test2.cpp文件生成 Dllsam.dll, 生成成功,
第五步:把Dllsam.dll放在 和NativeDemo.class同一目录下。
第六步:运行结果: java NativeDemo
结果是: this is ob.i:10
请问正确结果该是 hello:!
this is in the native method!
this is ob.i:10
为什么调用动态库的东西没出来,你们帮我看看,我十分着急。
|
因为你根本没有调用Native方法啊!
import java.lang.*;
import java.io.*;
import java.util.*;
public class NativeDemo
{
int i;
int j;
public static void main(String args[])
{
NativeDemo ob = new NativeDemo();
ob.i = 10;
ob.test();
System.out.println("this is ob.i:"+ob.i+"n");
}
public native int test();
static
{
System.loadLibrary("Dllsam");
}
}
import java.lang.*;
import java.io.*;
import java.util.*;
public class NativeDemo
{
int i;
int j;
public static void main(String args[])
{
NativeDemo ob = new NativeDemo();
ob.i = 10;
ob.test();
System.out.println("this is ob.i:"+ob.i+"n");
}
public native int test();
static
{
System.loadLibrary("Dllsam");
}
}