Apache Flex AS 3-获取JAVA主目录路径

polhcujo  于 2022-11-21  发布在  Apache
关注(0)|答案(1)|浏览(193)

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

muk1a3rh

muk1a3rh1#

你 能 用 Environment Variables 帮 我 修 一下 吗 ?
你 能 确定 你 的 应用 程序 用户 * * 真 的 * * 在 他们 的 账户 环境 设置 中 添加 了 JAVA_HOME 路径 吗 ? 如果 他们 没有 按照 一些 教程 操作 , 那么 你 的 想法 将 一无所获 。
但 我 的 问题 是 在 Windows 和 Mac OS 上 找到 JAVA_HOME
可以 使用 terminal 命令 查找 JAVA_HOME

    • Mac 操作 系统 * * : ( 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 * * 注册 表 * * 中 用户 的 currentVersion , 然后 检查 特定 当前 版本 的 JavaHome

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

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

格式

      • 备注 * * * :或者 , 只需 执行 java -version 即可 获得 正确 的 数字 , 以便 执行 下一步 ( b ) 。

(b)根据 以上 找到 的 版本 检查 Java * * 主 路径 * * ( 例如 :* * 1.8 * * 或 * * 1.8.0_102 * * ) ... ...

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

格式
cmd.exe 窗口 中 练习 上述 选项 , 以 轻松 查看 其 输出 。
稍后 , 在 您 的 AS3 代码 中 , 您 可以 使用 Regular ExpressionString 函数 提取 您 需要 的 号码 或 目录 路径 。

      • 选项 + + * * * :其他 选项 包括 使用 where /r c:\ java.exe 来 搜索 c:\ 驱动 器 中 的 文件 位置 ( 文件 夹 ) , 但 在 大型 驱动 器 上 速度 可能 会 很 慢 ( 这 是 一 种 隐 式 搜索 , 搜索 * * 所有 * * 子 文件 夹 ) 。

您 询问 了 有关 环境 变量 ( 而 不是 注册 表 ) 的 问题 , 下面 是 一 个 快速 示例 * * * Option 1 * * * for Windows 。
(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

格式

相关问题