該函數在win平臺上面調用不是很成功,GUI會可以調出來,但可能和屏蔽調其中的一些用到CUI的功能,而調用CUI如masm.exe是很不成功,出現一個黑屏,沒用內容,或者根本不有結果。
其程序如下:
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 );
}
/*include
CallExeNative.h
CallExeNative.dll
*/
import java.lang.*;
/*load a native method : to call a native file*/
新聞熱點
疑難解答