Skip to content
On this page

Java 搜寻器

ML 中,我们提供了 JavaUtil 类来对已安装的 Java 进行获取等操作

TIP

JavaUtil 类中的方法和属性均为静态方法静态属性,无需实例化此类。

基本信息

JavaUtil 类提供了 3 种方法进行不同的常用基本的 Java 操作

方法名说明
Fetch()和FetchAsync()异步或同步在磁盘中搜索已安装的Java
GetJavaInfo(string)异步获取一个已安装Java的信息(如版本,是否为64位)
GetCurrentJava(IEnumerable<JavaEntry>, GameEntry)从提供的Java列表中选择适合启动选定游戏的Java

用法

Fetch()和FetchAsync()

讲解

执行这个方法后,它会返回类型为 “IEnumerable<JavaEntry>” 的一个列表,这个列表包含了大部分磁盘上的 Java 信息。(如果一些Java所在的位置没有被词典所收录,那么这个Java将不会搜索到。)Fetch()和FetchAsync()的区别是FetchAsync()为异步方法,Fetch()为同步方法,异步方法不会堵塞主线程,这不会导致您的应用会有短时间的卡死。

无需担心跨平台,这个方法可以自动识别您的应用在什么操作系统上运行,从而使用正确的方法运行。

您可以通过 “JavaEntry” 类来获取 Java 的版本,位数等信息。

TIP

JavaEntry类包含的属性有:

  • JavaVersion:Java的详细版本号,如:17.0.9

  • JavaSlugVersion:Java的简略版本号,如:17

  • Is64Bit:类型为bool,检查是否为64为的Java

  • JavaPath:javaw.exe的可执行文件路径

  • JavaDirectoryPath:javaw.exe所在的文件夹路径

示例代码

C#
//引用
using MinecraftLaunch.Classes.Models.Game;
using MinecraftLaunch.Components.Fetcher;
...

//实例化
JavaFetcher javaFetcher = new JavaFetcher();

//搜索磁盘里的Java并把它们存储到一个集合里
 var JavaList = javaFetcher.Fetch();

 //输出
 Debug.WriteLine("您的设备总共有" + JavaList.Length + "个Java,它们是:");

 //遍历集合
 foreach(JavaEntry javalist in JavaList)
 {
    //输出Java的信息
     Console.WriteLine("Java路径:" + javalist.JavaPath + ",Java版本:" + javalist.JavaVersion + ",是否为64位:" + javalist.Is64Bit);
 }
 //异步方法这里不做示例。

输出

假设您的设备里有两个Java,它们分别为

  • JRE 1.8.0_391 - 32bit,放在“C:\Program Files (x86)\Java\jre1.8.0_391”里

  • JDK 17.0.9 - 64bit,放在“C:\Program Files\Java\jdk-17.0.9”里

那么,这些代码应该返回:

您的设备总共有2个Java,它们是:
Java路径:C:\Program Files (x86)\Java\jre1.8.0_391\bin\javaw.exe,Java版本:1.8.0_391,是否为64位:False
Java路径:C:\Program Files\Java\jdk-17.0.9\bin\javaw.exe,Java版本:17.0.9,是否为64位:True

GetJavaInfo(string)

这个方法需要一个字符串:string,也就是说您需要提供javaw.exe可执行文件的路径。 执行这个方法后,它会返回一个类型为JavaEntry的对象,这个对象包含了 Java 的版本,位数等信息,您可以在GetJavas的用法中找到JavaEntry的使用方法。

示例代码

C#
//引用
using MinecraftLaunch.Utilities;

...

//获取Java信息
var javaEmpty = JavaUtil.GetJavaInfo(@"Java路径\javaw.exe");

//输出
Console.WriteLine("获取到的Java信息:" + "Java路径:" + javaEmpty.JavaPath + ",Java版本:" + javaEmpty.JavaVersion + ",是否为64位:" + javaEmpty.Is64Bit);

输出

假设您的电脑里有个Java,它的路径为C:\Program Files\Java\jdk-17.0.9\bin\javaw.exe,那么,这些代码应该返回:

获取到的Java信息:Java路径:C:\Program Files\Java\jdk-17.0.9\bin\javaw.exe,Java版本:17.0.9,是否为64位:True

GetCurrentJava(IEnumerable<JavaEntry>, GameEntry)

讲解

这个方法需要一个类型为IEnumerable<JavaEntry>的对象,以及一个类型为GameEntry的对象,您可以在“(西路我不知道您帮我写QAQ)”找到更多关于GameCore的信息。 这个方法会返回一个类型为JavaEntry的对象,这个对象包含了 Java 的版本,位数等信息,返回的Java适合运行提供的核心的游戏,您可以在GetJavas的用法中找到JavaEntry的使用方法。

示例代码

C#
//引用
using MinecraftLaunch.Classes.Interfaces;
using MinecraftLaunch.Components.Fetcher;
using MinecraftLaunch.Components.Resolver;
using MinecraftLaunch.Utilities;

...

// 搜索电脑里已有的Java并把它们以JavaEmpty的类型存储在一个集合里
JavaFetcher javaFetcher = new JavaFetcher();
var JavaList = javaFetcher.Fetch();

//获取.minecraft文件夹里的所有版本
IGameResolver gameResolver = new GameResolver(@"C:\Users\stars\AppData\Roaming\.minecraft");
//选定最适合启动1.20.2的Java
var Java = JavaUtil.GetCurrentJava(JavaList, gameResolver.GetGameEntity("1.20.2-Fabric 0.15.5-OptiFine_I7_pre1"));
//输出
Console.WriteLine(Java.JavaPath + ", " + Java.JavaVersion + ", " + Java.Is64Bit);

输出

假如您的.minecraft文件夹的路径为C:\Users\stars\AppData\Roaming.minecraft,里面有一个版本:1.20.2-Fabric 0.15.5-OptiFine_I7_pre1,并且您的电脑有两个Java,它们分别是: JDK 17.0.8 JRE 1.8.0_391 那么,这些代码应该返回:

D:\Android\openjdk\jdk-17.0.8.101-hotspot\bin\javaw.exe, 17.0.8.1, True

以上就是关于Java操作工具的全部介绍,祝大家写码愉快😉

本文档遵循 MIT 协议,来点个 Star 嘛~