package com.anxin.ssk.util; import java.awt.Desktop; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.anxin.ssk.common.Config; public class CommandUtil { private static Logger log = LoggerFactory.getLogger(CommandUtil.class); /** * 执行cmd命令 * * @param command * @throws IOException */ public static String executeCmd(String command) throws IOException { log.info("Execute command : " + command); Runtime runtime = Runtime.getRuntime(); Process process = runtime.exec("cmd /c " + command); BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8")); String line = null; StringBuilder build = new StringBuilder(); while ((line = br.readLine()) != null) { log.info(line); build.append(line); } return build.toString(); } /** * 检测应用程序运行状态 * * @param programName * @return * @throws IOException */ public static boolean checkProgramStatus(String programName) throws IOException { log.info("检测应用程序:" + programName + "运行状态"); boolean result = false; // Config.Local.DATA_EXE_ADSUP String cmdLines = executeCmd("tasklist |findstr /i \"" + programName + "\""); if (StringUtils.isNotEmpty(cmdLines)) { log.info("后台任务列表找到" + programName + "程序正在运行······重启应用程序"); result = true; } else { log.error("没有在后台任务列表找到" + programName + "程序······重新打开新的应用程序"); } return result; } /** * 启动应用程序 * * @param programName * @return * @throws IOException */ public static void startProgram(String programPath) throws IOException { log.info("启动应用程序:" + programPath); if (StringUtils.isNotBlank(programPath)) { Desktop.getDesktop().open(new File(programPath)); // String programName = programPath.substring(programPath.lastIndexOf("\\") + 1, // programPath.lastIndexOf(".")); // executeCmd("start \"" + programName + "\" \"" + programPath + "\""); } } /** * 关闭应用程序 * * @param programName * @return * @throws IOException */ public static void closeProgram(String programName) throws IOException { log.info("关闭应用程序:" + programName); if (StringUtils.isNotBlank(programName)) { executeCmd("taskkill /F /IM " + programName); } } /** * 重启应用程序,若启动则重启,否则打开 * * @param programName * @return * @throws IOException */ public static void restartProgram(String programName, String programPath) throws IOException { log.info("重启应用程序:" + programName); if (checkProgramStatus(programName)) { closeProgram(programName); startProgram(programPath); } else { startProgram(programPath); } } public static void main(String[] args) { try { String programPath = "C:\\Program Files\\2345Pic\\2345PicViewer.exe"; // startProgram(programName); String programName = "2345PicViewer.exe"; restartProgram(programName, programPath); } catch (IOException e) { e.printStackTrace(); } } }
相关推荐
综上所述,"可以在应用程序中启动、关闭其他的应用程序、判断是否运行的用户对象"这一功能涵盖了操作系统级别的进程控制技术,涉及启动、终止、查询进程状态等多个方面。在实际开发中,理解并熟练运用这些技术对于...
在Android开发中,确保应用程序始终在前台运行是常见的需求,特别是在需要持续提供服务或避免数据丢失的情况下。"根据包名检测APP运行状态 开机自动检测"这个话题涉及到的关键技术包括Android服务(Service)、开机...
在Android平台上,开发人员可以实现一个功能,即从自己的应用程序中启动另一个应用,并且能够监控目标应用的运行状态。这通常涉及到Intent的使用,Activity管理,以及系统广播接收器。以下将详细介绍这些知识点: 1...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...
这里的`@echo off`是用来关闭命令行的回显,`java -jar`是执行JAR文件的命令,`TestDemo.jar`是你的JAR文件名,`pause`是为了让命令行窗口在执行结束后保持打开状态,以便查看输出结果。 4. **运行BAT文件**: ...
在Android应用程序开发中,引导页面(也称为启动引导页或新手引导)是向用户介绍应用功能、提升用户体验的重要部分。通常,这些页面会在用户首次打开应用时显示,以引导他们了解应用的核心价值和操作方式。本篇文章...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...
本篇将详细介绍如何在Android中判断GPS的状态,并在GPS关闭时引导用户进入位置服务设置页面。 首先,我们要了解Android系统的权限管理。在AndroidManifest.xml文件中,你需要添加对位置服务的权限请求: ```xml `...
Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...
Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...
Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...
在应用程序启动时初始化连接池,并配置最大连接数、超时时间等参数,从而优化数据库访问性能。 #### 6. Java中的异常处理 - **知识点概述**:异常处理是Java语言的一个重要特性,它可以帮助开发者捕捉并处理程序...
【JAVA象棋游戏】是一款基于Java编程语言开发的桌面应用程序,它为用户提供了与传统象棋游戏相似的体验。在这款游戏中,玩家可以享受到棋盘上的策略对决,同时还具有悔棋、新游戏和退出等便利功能,使得游戏过程更加...
`AppOpsManager` 是 Android 系统中的一种管理应用程序操作的类,它提供了一些有用的方法来判断应用程序的权限和状态。在上面的代码中,我们使用 `checkOpNoThrow` 方法来判断通知栏是否打开,如果返回 `true`,则...
微服务架构已成为现代软件开发的重要组成部分,它将大型应用程序拆分为小型、独立的服务,每个服务都可以单独部署和扩展。在微服务架构中,服务间的通信是关键,而断路器模式则是保障服务间通信稳定性和容错性的一种...
本程序提供了一个解决方案,能够实时监听并检测Android设备的蓝牙连接状态,无论用户是通过应用程序内的开关按钮操作,还是手动在系统设置中切换蓝牙,都能确保应用接收到最新的蓝牙状态变化。 首先,我们需要理解...
为了实现未登录判断,通常会在应用程序启动时或特定操作触发时检查用户是否已登录(例如,通过共享首选项、数据库或网络API)。如果用户未登录,可以展示登录界面,或者限制某些功能。以下是一个简单的示例,使用...
- 在检测到USB设备拔出后,应确保所有打开的设备句柄被正确关闭,避免资源泄漏或数据损坏。 - 对于存储设备,确保数据一致性,防止因意外拔出导致的数据丢失。 8. **应用实例**: - 打印机状态监测:办公室环境...