| 添加到收藏夹 | 返回目录页 | 上一篇:编写一个JAVA的队列类 |
调用CUI程序的方法
其程序如下:
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吗?我写这篇文章的目的是希望大家找到一种更好的方法来实现这个功能。
- · 在Eclipse中用SWT设计界面
- · JSP预定义变量的使用
- · JSP中实现页面跳转
- · 用Java编写通过代理访问的应用程序
- · Java入门需掌握的30个基本概念
- · Java和JavaScript有何关系?
- · 2004开发技术年度综述之Java世界
- · Java应用程序中创建图像
- · javamail收取Hotmail的退信
- · EJB组件与可重用性的矛盾
- · Java多线程编程之限制优先级
- · J2SE中的序列化之继承
- · Java中基本数据类型与流
- · JBuilder2005实现重构
- · 基于Java的代理设计模式
- · Taglib原理和实现
- · JBuilder9制作EXE文件
- · Java多线程编程精要
- · 谈谈J2SE中当序列化遭遇继承
- · 通过Java Swing看透MVC设计
- · Java多线程编程精要之高级支持
- · JBuilder和JDeveloper的简单比较
- · Java内存泄露问题分析
- · JavaBean实现多文件上传
- · 基于Java的解释器设计模式
- · Java语言接口与继承的本质
- · 实现基于Aspectwerkz的AOP开发
- · Java堆的管理--垃圾回收
- · EJB3.0开发指南之有状态会话Bean
- · J2SE5.0新特性之使用代理服务器
- · Hibernate下数据批量处理
- · Java中利用JMF编写摄像头拍照程序
- · Struts+Hibernate中解决汉字编码
- · Struts+Hibernate数据表示
- · 10分钟Hibernate体验
- · Eclipse中建立自己的JUnit测试
- · Java中四种XML解析技术
- · Java中关于XML的API
- · 为什么要学习Hibernate?
- · Weblogic上配置Hibernate为JNDI
- · Java开源项目Hibernate
- · 运行时实现Java的多态性
- · Hibernate包作用详解
- · J2SE1.5 注释语法
- · JDK 1.5之Generics

