调用CUI程序的方法

2016-01-29 13:01 40 1 收藏

调用CUI程序的方法,调用CUI程序的方法

【 tulaoshi.com - Java 】

  其程序如下:  

  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  

  这个文件不用改。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/java/)

  下面要写一个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_11bin).  

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/java/)

来源:http://www.tulaoshi.com/n/20160129/1488606.html

延伸阅读
用拨号连接拨号的RasAPI函数为RasDial,其函数原型为: function RasDial(pRasDialExtensions : LPRASDIALEXTENSIONS;//在WIN9X下无用,可 设置为NIL lpszPhonebook : PChar;//电话本名称,在Win9X下无作用,可为空字符串 lpRasDialParams : LPRASDIALPARAMS;//拨号参数 dwNotifierType : DWord;//消息通知方式 handle : ...
http://www.asp888.net 豆腐技术站 强大的数组功能(asp+程序数组功能调用) 数组的初始化:很简单 我们使用 new 关键字 来创建一个ArrayList 对象 给数组的item赋值,ArrayList 有方法Add 我们只要简单的来用就可以了 得到数组的大小:count 方法 好了,我们看看下面的例子 <% dim arr as new ArrayList arr.Add(1) arr.Add(3) arr.add(2) ar...
标签: Web开发
在javascript中,方法的链式调用很流行,使用jQuery的朋友对此一定深有体会。在《javascript设计模式》中对这种方法作了比较详细的描述,实现方法的链式调用,只须让在原型中定义的方法都返回调用这些方法的实例对象的引用即可,看看书中的这段代码: (function() {   function _$(els) {     this.elements = []; &nb...
标签: Java JAVA基础
远程方法调用 远程方法调用(Remote Method Invocation ,RMI)使用户能访问在另一 主机上的Java对象,并远程调用其方法。程序的对象是客户,而远程对象是服 务器。远程对象也可以是另一个远程服务对象的客户。通过使用持续性(串行 化和解串行化),本地对象和原始类型值可以作为参数传递给远程对象。这种 方式允许Java程序可以利用分布式...
首先得到:得到 DOM 解析器的工厂实例      DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance(); 然后从 DOM 工厂获得 DOM 解析器  DocumentBuilder dombuilder=domfac.newDocumentBuilder(); )把要解析的 XML 文档转化为输入流,以便 DOM 解析器解析它 InputStream is= new  F...

经验教程

104

收藏

50
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部