2017-12-07 13 views
-2

Java Home libディレクトリに拡張機能をコピーする必要があります。 しかし私の問題は、WindowsとMac OS上でjava homeを見つけることです。 このディレクトリは、各idkアップデートで変更されます。 環境変数で修正することができますか? よろしくお願いいたします。AS3 - JAVAホームパスを取得

+1

IDKのアップデートとは? ** JDK **(Javaアプリケーションのコンパイル用)または** JRE **(Javaアプリケーションの実行用)のパスを探していますか? **あなたが試したことを**表示しないことによって**意味が分かります**知っておく必要がある情報が何もわからないので、答えは長くなります**とにかくあなたに役立つことを願っています。 –

答えて

0

Environment Variablesで修正できますか?

あなたはアプリのユーザーは実際が自分のアカウントの環境設定にJAVA_HOMEパスを追加していることを確認することができますか?彼らがチュートリアルに従わなければ、あなたのアイデアは何も見つかりません。

しかし、私の問題は、WindowsとMac OSでJAVA_HOMEを見つけることです。

端末コマンドを使用してJAVA_HOMEを見つけることができます。

Mac OSの:(source:未テストなしマック以降で利用可能)

/usr/libexec/java_home 


のWindows OS:(cmd.exeコマンドラインを使用して)

オプション1:通常set新しいエントリを追加環境変数はになりますが、パラメータなしで使用すると、既存の環境変数が一覧表示されます。

JAVA_HOME=C:\Program Files\Java\jre1.8.0_102 
JDK_HOME=C:\Program Files\Java\jdk1.8.0_102 
JRE_HOME=C:\Program Files\Java\jre1.8.0_102\jre 

オプション2:私はを含む長いテキストの結果得られ

set 

は私の1件の結果を与える

for %i in (java.exe) do @echo. %~$PATH:i 

(システムの現在のJava.exeパスを取得します) :C:\Program Files\Java\jre1.8.0_102\bin\java.exe

オプション3:Windowsの場合、私は最良の選択肢は、ユーザーのcurrentVersionのWindows レジストリをチェックし、その具体的なCURRENTVERSIONのJavaHomeを確認することだと思います。

(A)は、Windowsが使用するJava 現在のバージョンを確認...

REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\ /v "CurrentVersion" /s 

ノート:それとも、次のステップ(b)のための正しい番号を取得するためにjava -versionを行います。

(b)は上記見つかったバージョン(例:1.8 または1.8.0_102)に基づいたJava ホームパスを確認...

REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\ /v "JavaHome" /s 


実践cmd.exeウィンドウの上記のオプションを使用すると、出力が簡単に表示されます。

その後、AS3コードでは、Regular ExpressionまたはString関数を使用して、必要な番号またはディレクトリパスを抽出することができます。

オプション++:その他のオプションは、(aphabeticalあるとすべてサブフォルダを検索)ファイルの場所(フォルダ)のためc:\ドライブを検索するwhere /r c:\ java.exeを使用しますが、大きなドライブに遅くなることがあります。あなたはとても以下の環境変数(レジストリではない)について尋ね


は、Windows用のオプション1ことを行うための簡単な例です。

(PS:あなたはに関するエラーが出る場合 IDEでテストするとき、あなたがその後、エクスポート実行時のバージョンのため、あなたが未なければならない、あなたのAIR設定でのみ「拡張デスクトップ」をカチカチ「ネイティブプロセスがサポートされていません」それをチェックして、「デスクトップ」のみにチェックをつけてください)。

WindowsでCMD.exeをサイレントに開いてsetコマンドを渡した後、返されるテキスト出力を受け取る、テスト可能なコード例です。コードを短縮することができます。

package { 

import flash.display.MovieClip; 

import flash.events.*; 
import flash.errors.*; 

import flash.desktop.NativeProcess; 
import flash.desktop.*; 

import flash.filesystem.File; 

import flash.utils.ByteArray; 


public class Java_Get_Path_v3 extends MovieClip 
{ 

    private var NProcessExe:File; 

    private var NProcess :NativeProcess; //external Process (eg: notepad.exe) 
    private var nativeProcessStartupInfo :NativeProcessStartupInfo; 
    private var NProcess_Args :Vector.<String> = new Vector.<String>(); //Process startup options 

    private var str_CMD_Output :String = ""; 

    private var str_Java_Home :String = ""; 
    private var str_JDK_Home :String = ""; 
    private var str_JRE_Home :String = ""; 

    private var temp_Int :int = -1; 


    public function Java_Get_Path_v3() 
    { 
     //# 1) setup Native Process (Command Line runs in background (no window)) 
     createNativeProcess(); 

     //# 2) get Java "Home" path from Windows via "Environment Variables"; 
     get_Java_Path(); //is via stdout 

    } 


    private function createNativeProcess():void 
    { 
     if (NativeProcess.isSupported) 
     { 
      trace("## doing FUNCTION : createNativeProcess()"); 

      var pathToEXE:String = "c:/windows/system32/cmd.exe"; 
      NProcessExe = File.applicationDirectory.resolvePath(pathToEXE); 

      if (NProcessExe.exists) 
      { 
       //# initialise Process 
       NProcess = new NativeProcess(); 

       //# add Process listeners for events 
       NProcess.addEventListener(ProgressEvent.PROGRESS, STD_onOutputData); 
       NProcess.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, STD_onOutputData); 
       NProcess.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, STD_onErrorData); 

       NProcess.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, STD_onIOError); 
       NProcess.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, STD_onIOError); 
      } 
      else 
      { trace("The specified .exe file was not found"); } 

     } 
     else //# if NOT suppoNativeProcess. 
     { 
      trace("Native Process not supported in this mode (use only \"Extended Desktop\" when debugging)"); 
     } 
    } 


    private function get_Java_Path():void 
    { 
     //# use to get Java Home path 
     NProcess_Args[0] = ("\/c" + "set"); 

     //# use to get Java version 
     //NProcess_Args[0] = ("\/c" + "java -version"); 

     //# start the Native Process (eg: silent running of CMD.exe) 
     //# triggers :::: public function STD_onOutputData 
     nativeProcessStartupInfo = new NativeProcessStartupInfo(); 
     nativeProcessStartupInfo.executable = NProcessExe; 
     nativeProcessStartupInfo.arguments = NProcess_Args; 

     NProcess.start(nativeProcessStartupInfo); 

    } 


    private function update_String_with_Path():void 
    { 
     trace("## doing FUNCTION : update_String_with_Path()"); 

     //trace("str_CMD_Output : " + str_CMD_Output); 

     temp_Int = str_CMD_Output.indexOf("JAVA_HOME"); //trace("temp_Int :" + temp_Int); 
     str_Java_Home = str_CMD_Output.substring(temp_Int, (str_CMD_Output.indexOf("\n", temp_Int))); 

     temp_Int = str_CMD_Output.indexOf("JDK_HOME"); //trace("temp_Int :" + temp_Int); 
     str_JDK_Home = str_CMD_Output.substring(temp_Int, (str_CMD_Output.indexOf("\n", temp_Int))); 

     temp_Int = str_CMD_Output.indexOf("JRE_HOME"); //trace("temp_Int :" + temp_Int) 
     str_JRE_Home = str_CMD_Output.substring(temp_Int, (str_CMD_Output.indexOf("\n", temp_Int))); 

     trace("=================================="); 

     trace("str_Java_Home : " + str_Java_Home); 
     trace("str_JDK_Home : " + str_JDK_Home); 
     trace("str_JRE_Home : " + str_JRE_Home); 

    } 


    public function STD_onOutputData(event:ProgressEvent):void 
    { 
     trace("## doing FUNCTION : STD_onOutputData(...)"); 

     if (NProcess && NProcess.running) 
     { 
      if (NProcess.standardOutput.bytesAvailable > 0) 
      { 
       trace("got bytes in... STD OUT : "); 

       //# Receive CMD.exe output (UTF bytes) into String... 
       str_CMD_Output = NProcess.standardOutput.readUTFBytes(NProcess.standardOutput.bytesAvailable); 

       trace("str_CMD_Output.length : " + str_CMD_Output.length + " characters"); 

       trace("## end of... STD_Out ::: "); 

       update_String_with_Path(); 

      } 

     } 
    } 


    public function STD_onErrorData(event:ProgressEvent):void 
    { 
     trace("## doing FUNCTION : STD_onErrorData(...)"); 

     if (NProcess.running == true) 
     { 
      //# sometimes Native Process output is in std-Error instead of std-Output 
      //# (is decided by the running .EXE file) 

      trace("## end of... STD_Error ::: "); 
     } 
    } 


    public function STD_onIOError(event:IOErrorEvent):void 
    { trace(event.toString()); } 


    private function STD_errorHandler(e:AsyncErrorEvent):void 
    { trace('ERROR: ' + e.text); } 


} //end Class 

} //end Package 
関連する問題