程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 調用CUI程序的方法

調用CUI程序的方法

編輯:關於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   

  這個文件不用改。

  下面要寫一個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嗎?我寫這篇文章的目的是希望大家找到一種更好的方法來實現這個功能。


           
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved