public void onApplicationEvent()

in spring-ai-alibaba-jmanus/src/main/java/com/alibaba/cloud/ai/example/manus/config/startUp/AppStartupListener.java [46:108]


	public void onApplicationEvent(ApplicationReadyEvent event) {
		// 只有当配置允许自动打开浏览器时才执行
		if (!manusProperties.getOpenBrowserAuto()) {
			logger.info("自动打开浏览器功能已禁用");
			return;
		}

		String url = "http://localhost:" + serverPort + "/";
		logger.info("应用已启动,正在尝试打开浏览器访问: {}", url);

		// 首先尝试使用Desktop API
		try {
			if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
				Desktop.getDesktop().browse(new URI(url));
				logger.info("已通过Desktop API成功打开浏览器");
				return;
			}
		}
		catch (Exception e) {
			logger.warn("使用Desktop API打开浏览器失败,尝试使用Runtime执行命令", e);
		}

		// 如果Desktop API失败,尝试使用Runtime执行命令
		String os = System.getProperty("os.name").toLowerCase();
		Runtime rt = Runtime.getRuntime();
		try {
			if (os.contains("mac")) {
				// macOS特定命令
				rt.exec(new String[] { "open", url });
				logger.info("已通过macOS open命令成功打开浏览器");
			}
			else if (os.contains("win")) {
				// Windows特定命令
				rt.exec(new String[] { "cmd", "/c", "start", url });
				logger.info("已通过Windows命令成功打开浏览器");
			}
			else if (os.contains("nix") || os.contains("nux")) {
				// Linux特定命令,尝试几种常见的浏览器打开方式
				String[] browsers = { "google-chrome", "firefox", "mozilla", "epiphany", "konqueror", "netscape",
						"opera", "links", "lynx" };

				StringBuilder cmd = new StringBuilder();
				for (int i = 0; i < browsers.length; i++) {
					if (i == 0) {
						cmd.append(String.format("%s \"%s\"", browsers[i], url));
					}
					else {
						cmd.append(String.format(" || %s \"%s\"", browsers[i], url));
					}
				}

				rt.exec(new String[] { "sh", "-c", cmd.toString() });
				logger.info("已通过Linux命令尝试打开浏览器");
			}
			else {
				logger.warn("未知操作系统,无法自动打开浏览器,请手动访问: {}", url);
			}
		}
		catch (IOException e) {
			logger.error("通过Runtime执行命令打开浏览器失败", e);
			logger.info("请手动在浏览器中访问: {}", url);
		}
	}