const path = require('path'); // 动态获取 scripts 目录路径 function getScriptsPath(scriptName) { // 开发环境 const devPath = path.join(__dirname, '../../scripts', scriptName); // 生产环境(打包后) const prodPath = path.join(process.resourcesPath, 'scripts', scriptName); try { // 先尝试开发环境路径 require.resolve(devPath); return devPath; } catch (e) { // 如果开发环境路径不存在,使用生产环境路径 return prodPath; } } // 延迟加载 JavaRunner let JavaRunner = null; function getJavaRunner() { if (!JavaRunner) { JavaRunner = require(getScriptsPath('java-runner')); } return JavaRunner; } /** * Java 控制器 - 提供 JRE 管理和 Java 程序调用接口 */ class JavaController { /** * 检查 JRE 是否可用 */ async checkAvailability() { try { const JavaRunnerClass = getJavaRunner(); const javaRunner = new JavaRunnerClass(); const available = javaRunner.isJREAvailable(); return { success: true, data: { available } }; } catch (error) { return { success: false, message: error.message }; } } /** * 获取 Java 版本 */ async getVersion() { try { const JavaRunnerClass = getJavaRunner(); const javaRunner = new JavaRunnerClass(); const version = await javaRunner.getVersion(); return { success: true, data: { version } }; } catch (error) { return { success: false, message: error.message }; } } /** * 获取 JRE 路径信息 */ async getPathInfo() { try { const JavaRunnerClass = getJavaRunner(); const javaRunner = new JavaRunnerClass(); const pathInfo = javaRunner.getPathInfo(); return { success: true, data: pathInfo }; } catch (error) { return { success: false, message: error.message }; } } /** * 运行 JAR 文件(异步,等待完成) * @param {Object} params - { jarPath, args } */ async runJar(params) { const { jarPath, args = [] } = params; if (!jarPath) { return { success: false, message: 'JAR path is required' }; } try { const JavaRunnerClass = getJavaRunner(); const javaRunner = new JavaRunnerClass(); const exitCode = await javaRunner.runJarAsync(jarPath, args); return { success: true, data: { exitCode } }; } catch (error) { return { success: false, message: error.message }; } } } JavaController.toString = () => '[class JavaController]'; module.exports = JavaController;