java

位置:IT落伍者 >> java >> 浏览文章

在 java 里面调用 CUI 程序的方法


发布日期:2022年01月14日
 
在 java 里面调用 CUI 程序的方法

问题描述

该函数在win平台上面调用不是很成功GUI会可以调出来但可能和屏蔽调其中的一些用到CUI的功能而调用CUI如masmexe是很不成功出现一个黑屏没用内容或者根本不有结果

其程序如下

class RunThread{

Process t

public void run(){

try{

t = javalangRuntimegetRuntime()exec(c:\\masmexe);

}catch(javaioIOException e )

{

Systemoutprintln(e);

}

}

}

/************************************************/

class RunExeNative{

public static void main(String args[]){

RunThread RT = new RunThread();

RTrun();

}

}

下面是JNI + C 的本地化的实现方法

写一个CallExeNativeh

步骤如下

step one :

/**** CallExeNativejava ****/

编写CallExeNativejava文件

import javalang*;

class CallExeNative{

public native static void CEN();

static

{

SystemloadLibrary(CallExeNative);

}

}

在命令行里用:

javac CallExeNativejava

javah CallExeNative

然后你就多了一个 CallExeNativeh

它的文件如下

/* DO NOT EDIT THIS FILE it is machine generated */

#include <jnih>

/* 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

这个文件不用改

下面要写一个CallExeNativec文件该函数的功能是将你的CUI文件调出来

文件如下

#include C:\CallExeNativeh/*在你的机器上调试时可能要修改该文件路径*/

#include <stdioh>

#include <processh>

#include <conioh>

JNIEXPORT void JNICALL Java_CallExeNative_CEN(JNIEnv* env jclass cl)

{

charprog[];

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 CallExeNativec

之后你 会发现生成了一个CallExeNativedll文件现在写RunExeNativejava文件

/*include

CallExeNativeh

CallExeNativedll

*/

import javalang*;

/*load a native method : to call a native file*/

class CallExeNative{

public native static void CEN();

static

{

SystemloadLibrary(CallExeNative);

}

}

/************************************************/

class RunExeNative{

public static void main(String args[]){

CallExeNative CEN = new CallExeNative();

CENCEN();

}

}

同样用

javac RunExeNativejava

java RunExeNative

之后你就会发现提示你输入CUI文件的路径

你输入路径即可!

说明要注意的是CallExeNativeh和CallExeNativedll应该都在同一个文件夹(我的是在c:\jdk_\bin\)

不足之处破坏了java的移植性!而且你想想看同样的功能在VB下用Shell(filepathwindowstyle)很容易就搞定你还会用java吗?我写这篇文章的目的是希望大家找到一种更好的方法来实现这个功能               

上一篇:用JDOM完成Java更新XML文件

下一篇:java 读取网络照片