diff options
author | Petr Mrázek <peterix@gmail.com> | 2015-05-04 01:20:48 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2015-05-04 01:20:48 +0200 |
commit | 1b884d0a9dc28d8bca38fe8756482d991d0ea850 (patch) | |
tree | fabe4350a3d64123ad0801fe7c285c2150f9562b /logic/minecraft/MinecraftProcess.cpp | |
parent | 8e9d5f56b592fd0dd0f54e747a835391a775120d (diff) | |
download | PrismLauncher-1b884d0a9dc28d8bca38fe8756482d991d0ea850.tar.gz PrismLauncher-1b884d0a9dc28d8bca38fe8756482d991d0ea850.tar.bz2 PrismLauncher-1b884d0a9dc28d8bca38fe8756482d991d0ea850.zip |
GH-907 improve Java testing and PermGen deprecation handling
Diffstat (limited to 'logic/minecraft/MinecraftProcess.cpp')
-rw-r--r-- | logic/minecraft/MinecraftProcess.cpp | 70 |
1 files changed, 63 insertions, 7 deletions
diff --git a/logic/minecraft/MinecraftProcess.cpp b/logic/minecraft/MinecraftProcess.cpp index 9d18ad90..10d30b73 100644 --- a/logic/minecraft/MinecraftProcess.cpp +++ b/logic/minecraft/MinecraftProcess.cpp @@ -16,6 +16,8 @@ */ #include "minecraft/MinecraftProcess.h" #include "BaseInstance.h" +#include <java/JavaChecker.h> +#include <MMCStrings.h> #include <QDataStream> #include <QFile> @@ -141,11 +143,18 @@ QStringList MinecraftProcess::javaArguments() const args << QString("-Xms%1m").arg(m_instance->settings().get("MinMemAlloc").toInt()); args << QString("-Xmx%1m").arg(m_instance->settings().get("MaxMemAlloc").toInt()); - auto permgen = m_instance->settings().get("PermGen").toInt(); - if (permgen != 64) + + // No PermGen in newer java. + auto javaVersion = m_instance->settings().get("JavaVersion"); + if(Strings::naturalCompare(javaVersion.toString(), "1.8.0", Qt::CaseInsensitive) < 0) { - args << QString("-XX:PermSize=%1m").arg(permgen); + auto permgen = m_instance->settings().get("PermGen").toInt(); + if (permgen != 64) + { + args << QString("-XX:PermSize=%1m").arg(permgen); + } } + args << "-Duser.language=en"; if (!m_nativeFolder.isEmpty()) args << QString("-Djava.library.path=%1").arg(m_nativeFolder); @@ -167,12 +176,8 @@ void MinecraftProcess::arm() m_instance->setLastLaunch(); - QStringList args = javaArguments(); - QString JavaPath = m_instance->settings().get("JavaPath").toString(); emit log("Java path is:\n" + JavaPath + "\n\n"); - QString allArgs = args.join(", "); - emit log("Java Arguments:\n[" + censorPrivateInfo(allArgs) + "]\n\n"); auto realJavaPath = QStandardPaths::findExecutable(JavaPath); if (realJavaPath.isEmpty()) @@ -182,6 +187,57 @@ void MinecraftProcess::arm() MessageLevel::Warning); } + // check java version here. + { + QFileInfo javaInfo(realJavaPath); + qlonglong javaUnixTime = javaInfo.lastModified().toMSecsSinceEpoch(); + auto storedUnixTime = m_instance->settings().get("JavaTimestamp").toLongLong(); + // if they are not the same, check! + if(javaUnixTime != storedUnixTime) + { + QEventLoop ev; + auto checker = std::make_shared<JavaChecker>(); + bool successful = false; + QString errorLog; + QString version; + emit log(tr("Checking Java version..."), MessageLevel::MultiMC); + connect(checker.get(), &JavaChecker::checkFinished, + [&](JavaCheckResult result) + { + successful = result.valid; + errorLog = result.stderr; + version = result.javaVersion; + ev.exit(); + }); + checker->m_path = realJavaPath; + checker->performCheck(); + ev.exec(); + if(!successful) + { + // Error message displayed if java can't start + emit log(tr("Could not start java:"), MessageLevel::Error); + auto lines = errorLog.split('\n'); + for(auto line: lines) + { + emit log(line, MessageLevel::Error); + } + emit log("\nCheck your MultiMC Java settings.", MessageLevel::MultiMC); + m_instance->cleanupAfterRun(); + emit launch_failed(m_instance); + // not running, failed + m_instance->setRunning(false); + return; + } + emit log(tr("Java version is %1!\n").arg(version), MessageLevel::MultiMC); + m_instance->settings().set("JavaVersion", version); + m_instance->settings().set("JavaTimestamp", javaUnixTime); + } + } + + QStringList args = javaArguments(); + QString allArgs = args.join(", "); + emit log("Java Arguments:\n[" + censorPrivateInfo(allArgs) + "]\n\n"); + // instantiate the launcher part start(JavaPath, args); if (!waitForStarted()) |