1. gzyueqian
      18529173453
      首頁 > 新聞中心 > > 正文

      在Java里面調(diào)用CUI程序的方法

      更新時(shí)間: 2007-06-08 09:27:38來源: 粵嵌教育瀏覽量:766

        問題描述:

        該函數(shù)在win平臺(tái)上面調(diào)用不是很成功,GUI會(huì)可以調(diào)出來,但可能和屏蔽調(diào)其中的一些用到CUI的功能,而調(diào)用CUI如masm.exe是很不成功,出現(xiàn)一個(gè)黑屏,沒用內(nèi)容,或者根本不有結(jié)果。

        其程序如下:
        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 的本地化的實(shí)現(xiàn)方法:
        寫一個(gè):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
        然后你就多了一個(gè) :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
        這個(gè)文件不用改
        下面要寫一個(gè)CallExeNative.c文件:該函數(shù)的功能是將你的CUI文件調(diào)出來
        文件如下:
        #include "C:\CallExeNative.h"/*在你的機(jī)器上調(diào)試時(shí)可能要修改該文件路徑*/
        #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 );
        }
        現(xiàn)在visual c++ 的cl 功能在命令行下
        c:\>cl /LD CallExeNative.c
        之后你 會(huì)發(fā)現(xiàn)生成了一個(gè)CallExeNative.dll文件,現(xiàn)在寫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
        之后你就會(huì)發(fā)現(xiàn)提示你輸入CUI文件的路徑
        
        你輸入路徑即可!

        說明:要注意的是CallExeNative.h和CallExeNative.dll應(yīng)該都在同一個(gè)文件夾(我的是在c:\jdk1.3.1_11\bin\).

        不足之處:破壞了java的移植性!而且你想想看,同樣的功能在VB下用Shell(filepath,windowstyle)很容易就搞定,你還會(huì)用java嗎?我寫這篇文章的目的是希望大家找到一種更好的方法來實(shí)現(xiàn)這個(gè)功能。

      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 在线日韩欧美国产视频 | 亚洲中文字幕自拍一区 | 一本大道香蕉青青久久 | 亚洲欧美日韩精品专区 | 亚洲中文字幕久爱亚洲伊人 | 亚洲欧洲日本无在线码播放 |