`

Java判断应用程序启动状态并打开或关闭应用程序

    博客分类:
  • JAVA
阅读更多
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();
		}
	}

}

 

分享到:
评论

相关推荐

    可以在应用程序中启动、关闭其他的应用程序、判断是否

    综上所述,"可以在应用程序中启动、关闭其他的应用程序、判断是否运行的用户对象"这一功能涵盖了操作系统级别的进程控制技术,涉及启动、终止、查询进程状态等多个方面。在实际开发中,理解并熟练运用这些技术对于...

    根据包名检测APP运行状态 开机自动检测

    在Android开发中,确保应用程序始终在前台运行是常见的需求,特别是在需要持续提供服务或避免数据丢失的情况下。"根据包名检测APP运行状态 开机自动检测"这个话题涉及到的关键技术包括Android服务(Service)、开机...

    android打开另一App,并监测运行情况

    在Android平台上,开发人员可以实现一个功能,即从自己的应用程序中启动另一个应用,并且能够监控目标应用的运行状态。这通常涉及到Intent的使用,Activity管理,以及系统广播接收器。以下将详细介绍这些知识点: 1...

    java源码包---java 源码 大量 实例

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    bat文件调用java程序

    这里的`@echo off`是用来关闭命令行的回显,`java -jar`是执行JAR文件的命令,`TestDemo.jar`是你的JAR文件名,`pause`是为了让命令行窗口在执行结束后保持打开状态,以便查看输出结果。 4. **运行BAT文件**: ...

    Android应用程序实现欢迎引导页面的方法实现

    在Android应用程序开发中,引导页面(也称为启动引导页或新手引导)是向用户介绍应用功能、提升用户体验的重要部分。通常,这些页面会在用户首次打开应用时显示,以引导他们了解应用的核心价值和操作方式。本篇文章...

    java源码包3

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...

    java源码包2

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...

    GPS状态判断

    本篇将详细介绍如何在Android中判断GPS的状态,并在GPS关闭时引导用户进入位置服务设置页面。 首先,我们要了解Android系统的权限管理。在AndroidManifest.xml文件中,你需要添加对位置服务的权限请求: ```xml `...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...

    java源码包4

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...

    JAVA上百实例源码以及开源项目源代码

    Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...

    java问题解决途径

    在应用程序启动时初始化连接池,并配置最大连接数、超时时间等参数,从而优化数据库访问性能。 #### 6. Java中的异常处理 - **知识点概述**:异常处理是Java语言的一个重要特性,它可以帮助开发者捕捉并处理程序...

    JAVA象棋游戏

    【JAVA象棋游戏】是一款基于Java编程语言开发的桌面应用程序,它为用户提供了与传统象棋游戏相似的体验。在这款游戏中,玩家可以享受到棋盘上的策略对决,同时还具有悔棋、新游戏和退出等便利功能,使得游戏过程更加...

    Android开发实现判断通知栏是否打开及前往设置页面的方法

    `AppOpsManager` 是 Android 系统中的一种管理应用程序操作的类,它提供了一些有用的方法来判断应用程序的权限和状态。在上面的代码中,我们使用 `checkOpNoThrow` 方法来判断通知栏是否打开,如果返回 `true`,则...

    微服务断路器hystrix应用实例java工程源码.zip

    微服务架构已成为现代软件开发的重要组成部分,它将大型应用程序拆分为小型、独立的服务,每个服务都可以单独部署和扩展。在微服务架构中,服务间的通信是关键,而断路器模式则是保障服务间通信稳定性和容错性的一种...

    Android实时检测蓝牙连接状态(源码)

    本程序提供了一个解决方案,能够实时监听并检测Android设备的蓝牙连接状态,无论用户是通过应用程序内的开关按钮操作,还是手动在系统设置中切换蓝牙,都能确保应用接收到最新的蓝牙状态变化。 首先,我们需要理解...

    android studio 底部选项+侧滑+未登录判断

    为了实现未登录判断,通常会在应用程序启动时或特定操作触发时检查用户是否已登录(例如,通过共享首选项、数据库或网络API)。如果用户未登录,可以展示登录界面,或者限制某些功能。以下是一个简单的示例,使用...

    获取USB状态

    - 在检测到USB设备拔出后,应确保所有打开的设备句柄被正确关闭,避免资源泄漏或数据损坏。 - 对于存储设备,确保数据一致性,防止因意外拔出导致的数据丢失。 8. **应用实例**: - 打印机状态监测:办公室环境...

Global site tag (gtag.js) - Google Analytics