我需要在Java Home lib目录上复制扩展。 但我的问题是在Windows和Mac OS上找到java home。 此目录更改每个idk更新。 你能帮忙用环境变量修复它吗? 最好的问候。
答案 0 :(得分:0)
您可以使用
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,我认为最好的选择是检查用户currentVersion
的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 Expression
或String
函数提取您需要的数字或目录路径。
选项++ :其他选项包括使用where /r c:\ java.exe
在c:\
驱动器中搜索文件位置(文件夹),但速度很慢大型驱动器(是aphabetical并搜索所有子文件夹)。
您询问了环境变量(不是注册表),因此下面是一个快速示例,为Windows执行 选项1 。
(PS:如果您收到有关&#34的错误;不支持原生流程" 在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