【问题标题】:AS3 - Get JAVA Home pathAS3 - 获取 JAVA 主页路径
【发布时间】:2018-05-21 21:51:27
【问题描述】:

我需要在 Java Home lib 目录中复制一个扩展。 但我的问题是在 Windows 和 Mac OS 上找到 java home。 每次 idk 更新时,此目录都会更改。 你能用环境变量帮助修复它吗? 最好的问候。

【问题讨论】:

  • 什么是 IDK 更新?您是在寻找 JDK(用于编译 Java 应用程序)还是 JRE(用于运行 Java 应用程序)的路径?通过不显示您尝​​试过的内容,这意味着答案更长,因为我不知道您需要知道多少信息...无论如何希望它对您有用。

标签: java actionscript-3 apache-flex


【解决方案1】:

您能通过Environment Variables 帮助解决它吗?

您能否确定您的应用用户实际上已将JAVA_HOME 路径添加到其帐户的环境设置中?如果他们没有遵循一些教程,那么您的想法将一无所获。

但我的问题是在 Windows 和 Mac OS 上找到JAVA_HOME

您可以使用终端命令找到JAVA_HOME

Mac OS:(source :未测试,因为没有可用的 Mac)

/usr/libexec/java_home


Windows 操作系统:(使用cmd.exe 命令行)

选项 1 :通常set 添加新条目 环境变量,但如果不使用参数,它只会列出现有的环境变量。

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:(获取系统当前的Java.exe 路径)

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

这给了我一个结果:C:\Program Files\Java\jre1.8.0_102\bin\java.exe

选项 3:对于 Windows,我认为最好的选择是检查 Windows registry 以获取用户的 currentVersion,然后检查 @987654335 @ 那个特定的 currentVersion。

(a) 检查 Windows 使用的 Java 当前版本...

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

注意:或者只是做java -version 以获得下一步(b)的正确号码。

(b) 根据上面找到的版本检查 Java Home path(例如:1.81.8.0_102)...

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


cmd.exe 窗口中练习上述选项以轻松查看其输出。

稍后,在您的 AS3 代码中,您可以使用Regular ExpressionString 函数提取您需要的号码或目录路径。

选项 ++ :其他选项包括使用 where /r c:\ java.exe 搜索 c:\ 驱动器以查找文件位置(文件夹),但在大型驱动器上可能会很慢(是aphabetical 并搜索所有子文件夹)。


您询问的是环境变量(不是注册表),所以下面是一个针对 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

【讨论】:

    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2016-02-12
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多