熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

在 java 裡面調用 CUI 程序的方法

2013-11-23 18:49:26  來源: Java核心技術 

  問題描述
  該函數在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)
  {
    char prog[];
    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嗎?我寫這篇文章的目的是希望大家找到一種更好的方法來實現這個功能
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25805.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.