Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AS3-获取JAVA主路径_Java_Actionscript 3_Apache Flex - Fatal编程技术网

AS3-获取JAVA主路径

AS3-获取JAVA主路径,java,actionscript-3,apache-flex,Java,Actionscript 3,Apache Flex,我需要在Java Home lib目录上复制一个扩展。 但我的问题是在Windows和Mac OS上找到java主页。 此目录在每次idk更新时都会更改。 你能帮我用环境变量修复它吗。 致以最良好的祝愿 您能用环境变量来帮助修复它吗 您能否确保您的应用程序用户已将实际添加到其帐户的环境设置中?如果他们没有遵循一些教程,那么你的想法将一无所获 但我的问题是在Windows和Mac OS上查找JAVA\u HOME 您可以使用终端命令查找JAVA\u HOME Mac OS:(:未测试,因为没有可用

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

您能用
环境变量来帮助修复它吗

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

但我的问题是在Windows和Mac OS上查找
JAVA\u HOME

您可以使用终端命令查找
JAVA\u HOME

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


Windows OS:(使用
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
path)

这给了我一个结果:
C:\ProgramFiles\Java\jre1.8.0\u 102\bin\Java.exe

选项3:对于Windows,我认为最好的选择是检查Windows注册表中用户的
currentVersion
,然后检查特定currentVersion的
JavaHome

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

REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\ /v "CurrentVersion" /s
注意:或者只需执行
java-version
即可获得下一步(b)的正确编号

(b) 根据上面找到的版本(例如:1.81.8.0_102


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

稍后,在AS3代码中,可以使用
正则表达式
字符串
函数提取所需的编号或目录路径

Options++:其他选项包括使用
where/r c:\java.exe
来搜索
c:\
驱动器中的文件位置(文件夹),但在大型驱动器上速度可能会慢一些(是一个基本选项,搜索所有子文件夹)


您询问了有关环境变量(而不是注册表)的问题,因此下面是一个针对Windows的快速示例

(注:如果在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
包{
导入flash.display.MovieClip;
导入flash.events.*;
导入flash.errors.*;
导入flash.desktop.NativeProcess;
导入flash.desktop.*;
导入flash.filesystem.File;
导入flash.utils.ByteArray;
公共类Java_Get_Path_v3扩展了MovieClip
{
private-var-NProcessExe:File;
private var NProcess:NativeProcess;//外部进程(例如:notepad.exe)
私有变量nativeProcessStartupInfo:nativeProcessStartupInfo;
私有变量NProcess_Args:Vector.=新向量。;//进程启动选项
私有变量str_CMD_输出:String=“”;
私有变量str_Java_Home:String=“”;
私有变量str_JDK_Home:String=“”;
私有变量str_JRE_Home:String=“”;
私有变量temp_Int:Int=-1;
公共函数Java_Get_Path_v3()
{
//#1)设置本机进程(命令行在后台运行(无窗口))
createNativeProcess();
//#2)通过“环境变量”从Windows获取Java“主”路径;
get_Java_Path();//通过标准输出
}
私有函数createNativeProcess():void
{
if(NativeProcess.isSupported)
{
跟踪(##doing函数:createNativeProcess());
var pathToEXE:String=“c:/windows/system32/cmd.exe”;
NProcessExe=File.applicationDirectory.resolvePath(pathToEXE);
如果(nprocessex.exists)
{
//#初始化过程
NProcess=新的本机进程();
//#为事件添加进程侦听器
n进程添加事件列表器(ProgressEvent.PROGRESS,标准输出数据);
n进程添加事件列表器(ProgressEvent.STANDARD输出数据、STD输出数据);
n进程添加事件列表器(ProgressEvent.STANDARD\u ERROR\u数据、STD\u onErrorData);
n进程添加事件列表器(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR,STD_ERROR);
n进程添加事件列表器(IOErrorEvent.STANDARD_ERROR_IO_ERROR,STD_ERROR);
} 
其他的
{trace(“未找到指定的.exe文件”);}
} 
else/#如果不支持此过程。
{
跟踪(“本机进程在此模式下不受支持(调试时仅使用“扩展桌面”);
}
}
私有函数get_Java_Path():void
{
//#用于获取Java主路径
n进程参数[0]=(“\/c”+“集”);
//#用于获取Java版本
//n进程参数[0]=(“\/c”+“java-version”);
//#启动本机进程(例如:静默运行CMD.exe)
//#触发器:::公共函数STD_onOutputData
nativeProcessStartupInfo=新的nativeProcessStartupInfo();
nativeProcessStartupInfo.executable=NProcessExe;
nativeProcessStartupInfo.arguments=n进程参数;
NPROSS.start(nativeProcessStartupInfo);
}
私有函数用路径()更新字符串:void
{
跟踪(##doing函数:用_Path()更新_字符串)
REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\ /v "CurrentVersion" /s
REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\ /v "JavaHome" /s
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