100分请教XDJM们一个小问题 请教Java中Native限定词的用法,希望给个合适的程序例子说明一下。一定给分,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 native关键字指示该方法由本地代码实现,在Java程序中只需声明便可引用.-----------------------------例子开始-----------------------/*从Windows控制台中读取用户输入的用户名,打印欢迎信息*///--------------------1.写Java源文件/*HelloWorld.java*/public class HelloWorld{ static { System.loadLibrary("GetUserName");//加载实现本地方法的库,GetUserName是库名 //(不带后缀),在Windows上就是GetUserName.dll } private String userName = null; private native String getUserNameFromConsole();//本地方法 public static void main(String args[]) { HelloWorld hello = new HelloWorld(); userName = getUserNameFromConsole();//本地方法的调用形式与Java方法没有区别 System.out.println("Hello " + userName + ", Welcome to Java World!"); }}//---------------2.编译Java文件,生成HelloWorld.classjavac HelloWorld.java//---------------3.用HelloWorld.class生成本地方法的头文件HelloWorld.hjavah -jni HelloWorldHelloWorld.h中可以找到本地方法的函数原型JNIEXPORT jstring JNICALLJava_HelloWorld_print (JNIEnv *, jobject);//---------------4.在VC++6.0中创建HelloWorld.c实现本地方法//HelloWorld.c#include <jni.h>#include <stdio.h>#include "HelloWorld.h"JNIEXPORT jstring JNICALLJava_HelloWorld_print(JNIEnv *env, jobject obj){ printf("请输入用户名:"); char buf[128];//假设用户名不超过127字符 scanf("%s", buf); return (*env)->NewStringUTF(env, buf);}//--------------------5.编译连接HelloWorld.c,生成dll文件cl -Ic:\java\include -Ic:\java\include\win32-MD -LD HelloWorld.c -GetUserName.dll//-------------------6.运行Java程序,使用-Djava.library.path指示dll所在路径//这里假设与HelloWorld.class在相同目录下java -Djava.library.path=. HelloWorld//运行结果请输入用户名:James GoslingHello James Gosling, Welcome to Java World!--------------------------------例子完毕------------------------------想学的话还是找本书看吧,<Java Native Interface>不错. 勘误------------------------------ public static void main(String args[]) { HelloWorld hello = new HelloWorld(); hello.userName = hello.getUserNameFromConsole();//本地方法的调用形式与Java方法没有区别 System.out.println("Hello " + hello.userName + ", Welcome to Java World!"); } 勘误------方法名copy错了---------------------------//---------------3.用HelloWorld.class生成本地方法的头文件HelloWorld.hjavah -jni HelloWorldHelloWorld.h中可以找到本地方法的函数原型JNIEXPORT jstring JNICALLJava_HelloWorld_getUserNameFromConsole (JNIEnv *, jobject);//---------------4.在VC++6.0中创建HelloWorld.c实现本地方法//HelloWorld.c#include <jni.h>#include <stdio.h>#include "HelloWorld.h"JNIEXPORT jstring JNICALLJava_HelloWorld_getUserNameFromConsole(JNIEnv *env, jobject obj){ printf("请输入用户名:"); char buf[128];//假设用户名不超过127字符 scanf("%s", buf); return (*env)->NewStringUTF(env, buf);} Native是指本地方法 比如JAVA调用C 调用C++的API等 即JNI JAVA NATIVE INTERFACE举个非常简单的例子class HelloNative{ public static native void greeting();//这就是一个NATIVE方法 是不是看起来和抽象方法一样?呵呵 ~~如果不调用他的话编译是能通过的 static { System.loadLibrary("HelloNative"); }}class HelloNativeTest{ public static void main(String[] args) { HelloNative.greeting(); }} 各位辛苦了,都给分。非常感谢asp3344()和lixiaoxue85(蛮野蛮)。两位100分,其他人也有分。 详情参看JNI,至于说JNI不能跨平台,就要看跨平台要怎么解释了。 发布本人做的一个java 关键字查询文档 组件的小问题~ 如何将DecimalFormat的字符串返还转换为数字? 求个MappingDispatchAction类的例子 JTable如何合并单元格? 请高手为小弟讲解关于JAVA中关于编译时的错误和执行错误的区别 谁能帮我解释一下这段代码中的疑惑,有关引用类型的 怎样把.jar弄成.exe文件,急!!!!!!!!!!!!!! 匹配中文和()的正则表达式怎么写? 在这里第一次提问!! 怎么样将任意一个byte[]转换成String, 然后再把String还原成byte[] 数组一次按顺序查询多个值问题
-----------------------------例子开始-----------------------
/*从Windows控制台中读取用户输入的用户名,打印欢迎信息*/
//--------------------1.写Java源文件/*HelloWorld.java*/
public class HelloWorld
{
static
{
System.loadLibrary("GetUserName");//加载实现本地方法的库,GetUserName是库名
//(不带后缀),在Windows上就是GetUserName.dll
}
private String userName = null;
private native String getUserNameFromConsole();//本地方法
public static void main(String args[])
{
HelloWorld hello = new HelloWorld();
userName = getUserNameFromConsole();//本地方法的调用形式与Java方法没有区别
System.out.println("Hello " + userName + ", Welcome to Java World!");
}
}
//---------------2.编译Java文件,生成HelloWorld.class
javac HelloWorld.java//---------------3.用HelloWorld.class生成本地方法的头文件HelloWorld.h
javah -jni HelloWorld
HelloWorld.h中可以找到本地方法的函数原型
JNIEXPORT jstring JNICALL
Java_HelloWorld_print (JNIEnv *, jobject);//---------------4.在VC++6.0中创建HelloWorld.c实现本地方法
//HelloWorld.c#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT jstring JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("请输入用户名:");
char buf[128];//假设用户名不超过127字符
scanf("%s", buf);
return (*env)->NewStringUTF(env, buf);
}//--------------------5.编译连接HelloWorld.c,生成dll文件
cl -Ic:\java\include -Ic:\java\include\win32
-MD -LD HelloWorld.c -GetUserName.dll//-------------------6.运行Java程序,使用-Djava.library.path指示dll所在路径
//这里假设与HelloWorld.class在相同目录下
java -Djava.library.path=. HelloWorld
//运行结果
请输入用户名:James Gosling
Hello James Gosling, Welcome to Java World!--------------------------------例子完毕------------------------------
想学的话还是找本书看吧,<Java Native Interface>不错.
public static void main(String args[])
{
HelloWorld hello = new HelloWorld();
hello.userName = hello.getUserNameFromConsole();//本地方法的调用形式与Java方法没有区别
System.out.println("Hello " + hello.userName + ", Welcome to Java World!");
}
//---------------3.用HelloWorld.class生成本地方法的头文件HelloWorld.h
javah -jni HelloWorld
HelloWorld.h中可以找到本地方法的函数原型
JNIEXPORT jstring JNICALL
Java_HelloWorld_getUserNameFromConsole (JNIEnv *, jobject);//---------------4.在VC++6.0中创建HelloWorld.c实现本地方法
//HelloWorld.c#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT jstring JNICALL
Java_HelloWorld_getUserNameFromConsole(JNIEnv *env, jobject obj)
{
printf("请输入用户名:");
char buf[128];//假设用户名不超过127字符
scanf("%s", buf);
return (*env)->NewStringUTF(env, buf);
}
举个非常简单的例子
class HelloNative
{
public static native void greeting();//这就是一个NATIVE方法 是不是看起来和抽象方法一样?呵呵 ~~如果不调用他的话编译是能通过的
static
{
System.loadLibrary("HelloNative");
}
}class HelloNativeTest
{
public static void main(String[] args)
{
HelloNative.greeting();
}
}