其程序如下:
class RunThread{ Process t public void run(){ try{ t = java.lang.Runtime.getRuntime().exec("c:\\masm.exe"); }catch(java.io.IOException e ) { System.out.println(e); } } }
/************************************************/
class RunExeNative{ public static void main(String args[]){ RunThread RT = new RunThread(); RT.run(); } }
下面是JNI + C 的本地化的實現方法:
寫一個:CallExeNative.h
步驟如下:
step one : /**** CallExeNative.java ****/ 編寫CallExeNative.java文件 import java.lang.*; class CallExeNative{ public native static void CEN(); static { System.loadLibrary("CallExeNative"); } }
在命令行里用:
javac CallExeNative.java javah CallExeNative
然后你就多了一個 :CallExeNative.h
它的文件如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class CallExeNative */ #ifndef _Included_CallExeNative #define _Included_CallExeNative #ifdef __cplusplus extern "C" { #endif /* * Class: CallExeNative * Method: CEN * Signature: ()V */ JNIEXPORT void JNICALL Java_CallExeNative_CEN (JNIEnv *, jclass); #ifdef __cplusplus } #endif #endif
這個文件不用改。 下面要寫一個CallExeNative.c文件:該函數的功能是將你的CUI文件調出來
文件如下:
#include "C:\CallExeNative.h"/*在你的機器上調試時可能要修改該文件路徑*/ #include <stdio.h> #include <process.h> #include <conio.h> JNIEXPORT void JNICALL Java_CallExeNative_CEN(JNIEnv* env, jclass cl) { char prog[80]; printf("Hello CallExeNative!\n"); printf( "Enter name of program to exec: " ); gets( prog ); _execl( prog, prog, "_execl", "two", NULL ); }
現在visual c++ 的cl 功能在命令行下
c:\>cl /LD CallExeNative.c
之后你會發現生成了一個CallExeNative.dll文件,現在寫RunExeNative.java文件:
/*include CallExeNative.h CallExeNative.dll */ import java.lang.*; /*load a native method : to call a native file*/ class CallExeNative{ public native static void CEN(); static { System.loadLibrary("CallExeNative"); } } /************************************************/ class RunExeNative{ public static void main(String args[]){ CallExeNative CEN1 = new CallExeNative(); CEN1.CEN(); } }
同樣用
javac RunExeNative.java java RunExeNative
之后你就會發現提示你輸入CUI文件的路徑
你輸入路徑即可!
說明:要注意的是CallExeNative.h和CallExeNative.dll應該都在同一個文件夾(我的是在c:\jdk1.3.1_11\bin\).
不足之處:破壞了java的移植性!而且你想想看,同樣的功能在VB下用Shell(filepath,windowstyle)很容易就搞定,你還會用java嗎?我寫這篇文章的目的是希望大家找到一種更好的方法來實現這個功能。
|