| 49 | {} |
| 50 | |
| 51 | void JavaChecker::executeTask() |
| 52 | { |
| 53 | QString checkerJar = JavaUtils::getJavaCheckPath(); |
| 54 | |
| 55 | if (checkerJar.isEmpty()) { |
| 56 | qDebug() << "Java checker library could not be found. Please check your installation."; |
| 57 | return; |
| 58 | } |
| 59 | #ifdef Q_OS_WIN |
| 60 | checkerJar = FS::getPathNameInLocal8bit(checkerJar); |
| 61 | #endif |
| 62 | |
| 63 | QStringList args; |
| 64 | |
| 65 | process.reset(new QProcess()); |
| 66 | if (m_args.size()) { |
| 67 | auto extraArgs = Commandline::splitArgs(m_args); |
| 68 | args.append(extraArgs); |
| 69 | } |
| 70 | if (m_minMem != 0) { |
| 71 | args << QString("-Xms%1m").arg(m_minMem); |
| 72 | } |
| 73 | if (m_maxMem != 0) { |
| 74 | args << QString("-Xmx%1m").arg(m_maxMem); |
| 75 | } |
| 76 | if (m_permGen != 64 && m_permGen != 0) { |
| 77 | args << QString("-XX:PermSize=%1m").arg(m_permGen); |
| 78 | } |
| 79 | |
| 80 | args.append({ "-jar", checkerJar }); |
| 81 | process->setArguments(args); |
| 82 | process->setProgram(m_path); |
| 83 | process->setProcessChannelMode(QProcess::SeparateChannels); |
| 84 | process->setProcessEnvironment(CleanEnviroment()); |
| 85 | qDebug() << "Running java checker:" << m_path << args.join(" "); |
| 86 | |
| 87 | connect(process.get(), QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this, &JavaChecker::finished); |
| 88 | connect(process.get(), &QProcess::errorOccurred, this, &JavaChecker::error); |
| 89 | connect(process.get(), &QProcess::readyReadStandardOutput, this, &JavaChecker::stdoutReady); |
| 90 | connect(process.get(), &QProcess::readyReadStandardError, this, &JavaChecker::stderrReady); |
| 91 | connect(&killTimer, &QTimer::timeout, this, &JavaChecker::timeout); |
| 92 | killTimer.setSingleShot(true); |
| 93 | killTimer.start(15000); |
| 94 | process->start(); |
| 95 | } |
| 96 | |
| 97 | void JavaChecker::stdoutReady() |
| 98 | { |