2017-12-07 22 views
-2

Java Home lib 디렉토리에 확장을 복사해야합니다. 하지만 내 문제는 Windows 및 Mac OS에서 java 홈을 찾는 것입니다. 이 디렉토리는 각 idk 업데이트마다 변경됩니다. 환경 변수로 수정하는 것을 도와 주실 수 있습니까? 감사합니다.AS3 - JAVA 홈 경로 얻기

+1

IDK 업데이트 란 무엇입니까? ** JDK ** (Java 응용 프로그램 컴파일 용) 또는 ** JRE ** (Java 응용 프로그램 실행 용) 경로를 찾고 있습니까? ** 당신이 시도한 것을 ** 표시하지 않음으로써 ** 의미는 ** 당신이 알아야 할 정보가 얼마나 있는지 모르므로 대답이 더 길다 ** 어쨌든 당신에게 유용 할 것입니다. –

답변

0

Environment Variables으로 해결할 수 있습니까?

당신은 앱 사용자가 실제로 자신의 계정의 환경 설정에 JAVA_HOME 경로를 추가이 있는지 확인 될 수 있을까? 그들이 튜토리얼을 따르지 않았다면 당신의 아이디어는 아무것도 찾을 수 없을 것입니다.

그러나 문제는 Windows 및 Mac OS에서 JAVA_HOME을 찾는 것입니다.

JAVA_HOME을 찾으려면 터미널 명령을 사용할 수 있습니다.

맥 OS : (source : 검증되지 않은 이후 사용 가능한 맥 없음)

/usr/libexec/java_home 


윈도우 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 

나에게 한 결과를 제공

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에서 사용 현재 버전 확인 ...

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

참고 : 또는 바로 다음 단계에 대한 정확한 숫자를 얻기 위해 java -version을 (B).

(b)는 위의 발견 버전을 기반으로 자바 홈 경로 확인 (예 : 1.8 또는 1.8.0_102) ...

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


연습 cmd.exe 창의 위의 옵션을 사용하면 출력을 쉽게 볼 수 있습니다.

나중에 AS3 코드에서 Regular Expression 또는 String 함수를 사용하여 필요한 번호 또는 디렉토리 경로를 추출 할 수 있습니다.

옵션 ++ : 다른 옵션은 파일 위치 c:\ 드라이브 (폴더)를 검색 할 where /r c:\ java.exe를 사용하여 포함하지만, 대형 드라이브의 속도가 느려질 수 있습니다 것은 (aphabetical하고 모든 하위 폴더 검색).


는 당신은 너무 아래의 Windows에 대한 것을 옵션 1을 할 수있는 간단한 예입니다 환경 변수 (안 레지스트리)에 대해 물었다.

(PS : 당신이 에 대해 오류가 발생하는 경우 IDE에서 테스트 할 때 당신이되지 않는다는 것은 있어야 수출 런타임 버전 나중에 그런 다음 AIR 설정에서 "확장 바탕 화면"을 체크 "기본 프로세스는 지원되지 않습니다" 똑딱 똑딱 똑딱 "데스크톱").

자동으로 CMD.exe를 열고 set 명령을 전달하는 Windows 용 테스트 가능한 코드 예제는 반환 된 텍스트 출력을받습니다. 코드를 단축 할 수 있습니다 ...

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