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

在java里面调用CUI程序的方法推荐查看本文HTML版本

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

问题描述:

该函数在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

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

#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 );

}

现在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_11bin).

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值