問題描述:
該函數(shù)在win平臺(tái)上面調(diào)用不是很成功,GUI會(huì)可以調(diào)出來,但可能和屏蔽調(diào)其中的一些用到CUI的功能,而調(diào)用CUI如masm.exe是很不成功,出現(xiàn)一個(gè)黑屏,沒用內(nèi)容,或者根本不有結(jié)果。
其程序如下:
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 的本地化的實(shí)現(xiàn)方法:
寫一個(gè):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
然后你就多了一個(gè) :CallExeNative.h
它的文件如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* 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
這個(gè)文件不用改
下面要寫一個(gè)CallExeNative.c文件:該函數(shù)的功能是將你的CUI文件調(diào)出來
文件如下:
#include "C:\CallExeNative.h"/*在你的機(jī)器上調(diào)試時(shí)可能要修改該文件路徑*/
#include
#include
#include
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 );
}
現(xiàn)在visual c++ 的cl 功能在命令行下
c:\>cl /LD CallExeNative.c
之后你 會(huì)發(fā)現(xiàn)生成了一個(gè)CallExeNative.dll文件,現(xiàn)在寫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
之后你就會(huì)發(fā)現(xiàn)提示你輸入CUI文件的路徑
你輸入路徑即可!
說明:要注意的是CallExeNative.h和CallExeNative.dll應(yīng)該都在同一個(gè)文件夾(我的是在c:\jdk1.3.1_11\bin\).
不足之處:破壞了java的移植性!而且你想想看,同樣的功能在VB下用Shell(filepath,windowstyle)很容易就搞定,你還會(huì)用java嗎?我寫這篇文章的目的是希望大家找到一種更好的方法來實(shí)現(xiàn)這個(gè)功能。
在Java里面調(diào)用CUI程序的方法
更新時(shí)間: 2007-06-08 09:27:38來源: 粵嵌教育瀏覽量:766
粵嵌動(dòng)態(tài)
推薦閱讀
- ·Linux字符設(shè)備驅(qū)動(dòng)框架解析:file_operations的核心作用與實(shí)現(xiàn)
- ·廣東朝歌數(shù)碼科技股份有限公司專場招聘會(huì)
- ·深化產(chǎn)教融合,共筑技能人才培養(yǎng)新生態(tài) —— 廣州華立學(xué)院到訪粵嵌從化校區(qū)為深化產(chǎn)教
- ·校企合作新突破 | 粵嵌科技與三亞學(xué)院共探產(chǎn)教融合新路徑
- ·粵嵌科技入選國家級職業(yè)數(shù)字展館聯(lián)合建設(shè)單位,賦能計(jì)算機(jī)程序設(shè)計(jì)員高技能人才培養(yǎng)
- ·嵌入式實(shí)時(shí)操作系統(tǒng)的性能優(yōu)化與實(shí)現(xiàn)路徑
- ·校企攜手賦能教育!粵嵌科技助力海南科技職業(yè)大學(xué)探索 AGI 時(shí)代教學(xué)新范式
- ·嵌入式系統(tǒng)中的低功耗設(shè)計(jì)策略與實(shí)現(xiàn)路徑
- ·深圳市軒宇軟件開發(fā)有限公司專場招聘會(huì)
- ·嵌入式系統(tǒng)中的代碼空間優(yōu)化:策略與實(shí)踐