You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本启动Minecraft Fabric时JVM创建失败求助

问题:PowerShell启动Fabric版Minecraft时JVM创建失败

原本用C#开发Minecraft启动器效果不佳,转而使用PowerShell脚本。脚本能正常运行,但执行时弹出“Failed to create the JVM. Canceling application”错误,无额外上下文。脚本内容如下:

# Define the Minecraft and Fabric versions
$minecraftVersion = "1.21"  # Minecraft version to launch
$fabricVersion = "0.15.11"  # Fabric loader version
$gameDir = "$env:APPDATA\.minecraft"  # Path to the .minecraft directory
$versionDir = "$gameDir\versions\$minecraftVersion-fabric-$fabricVersion"  # Version-specific directory for Fabric
$assetsDir = "$gameDir\assets"  # Path to the assets directory
$librariesDir = "$gameDir\libraries"  # Path to the libraries directory
$kaydenClientVersion = "1.0"

# Main class for Minecraft with Fabric
$mainClass = "net.fabricmc.loader.impl.launch.knot.KnotClient"

# Get the total amount of RAM in GB
$totalRAM = [math]::Round((Get-CimInstance -ClassName Win32_ComputerSystem).TotalPhysicalMemory / 1GB, 0)

# Allocate RAM up to 64GB
$allocatedRAM = [math]::Min($totalRAM / 1.5, 64)

# JVM arguments, including dynamic memory allocation
$jvmArgs = "-Xmx${allocatedRAM}G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M"

# Construct the classpath (all required JARs for Fabric)
$classPath = "$versionDir\$minecraftVersion-fabric-$fabricVersion.jar;$librariesDir\*"

# Minecraft-specific arguments
$mcArgs = "--version $minecraftVersion-fabric-$fabricVersion --gameDir $gameDir --assetsDir $assetsDir --assetIndex $minecraftVersion"

# Combine JVM and Minecraft arguments
$arguments = "$jvmArgs -cp `"$classPath`" $mainClass $mcArgs"

# Start the Minecraft process using javaw from the system PATH
Start-Process -FilePath "javaw" -ArgumentList $arguments -WorkingDirectory $gameDir

Write-Host "Kayden Client $fabricVersion+$kaydenClientVersion is launching..."

对Minecraft文件夹结构不熟悉,不确定是Minecraft本身问题还是文件路径问题,需要排查帮助。


排查步骤与修复方案

1. 修正JVM内存分配逻辑

当前脚本按总RAM的1/1.5分配内存,可能超出系统可用物理内存(系统本身会占用部分RAM),导致JVM无法申请到足够内存。

  • 测试方案:临时将$jvmArgs里的-Xmx${allocatedRAM}G改成-Xmx4G,手动指定4GB内存,验证是否能启动。
  • 永久修复:调整内存分配公式为更保守的比例,比如:
    $allocatedRAM = [math]::Min([math]::Floor($totalRAM * 0.6), 64)
    
    这样分配总RAM的60%,最多不超过64GB,避免超出系统可用资源。

2. 验证Java版本兼容性

Minecraft 1.21要求使用Java 21,系统PATH中的javaw可能是旧版本(如Java 8/17),导致JVM启动失败。

  • 检查版本:打开命令提示符,运行javaw -version,确认输出为Java 21。
  • 修复:若版本不符,安装Java 21,并确保其bin目录在系统PATH的最前端;或直接在脚本中指定Java 21的完整路径:
    $javaPath = "C:\Program Files\Java\jdk-21\bin\javaw.exe"
    Start-Process -FilePath $javaPath -ArgumentList $arguments -WorkingDirectory $gameDir
    

3. 修复类路径(ClassPath)配置

脚本中$librariesDir\*的写法无法被Windows下的JVM正确解析,且Fabric的依赖需要严格按顺序加载。

  • 正确做法:读取Fabric生成的版本配置文件($versionDir\$minecraftVersion-fabric-$fabricVersion.json)中的classpath字段,该字段包含所有依赖库的完整路径列表,直接拼接即可。
  • 临时验证:先确认$versionDir\$minecraftVersion-fabric-$fabricVersion.jar文件存在,再将类路径改成具体的Fabric jar加单个依赖测试,排除路径错误。

4. 检查路径有效性与特殊字符

  • 用以下命令验证脚本中所有路径是否存在:
    Test-Path $versionDir
    Test-Path $classPath.Split(';')[0]
    Test-Path $librariesDir
    
    若返回False,说明路径错误,需检查版本号是否正确,或Fabric是否正确安装到对应版本目录。
  • 确保路径中无特殊字符(如中文、空格),若用户名包含空格,脚本中用双引号包裹路径的写法是正确的,但需确认JVM能正确解析。

5. 查看JVM详细错误日志

将javaw换成java,保留控制台窗口,以便查看完整的JVM错误信息:

Start-Process -FilePath "java" -ArgumentList $arguments -WorkingDirectory $gameDir -NoNewWindow

执行后控制台会显示具体的错误原因(如内存不足、Java版本不兼容、类路径缺失等),帮助精准定位问题。


内容的提问来源于stack exchange,提问作者user21367623

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:35:00