• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Java操作另一个Java程序使其重启的简单实现

Java操作另一个Java程序使其重启的简单实现

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了java程序拒绝打印,怎样学java程序,java安卓程序的优势,java程序设计初学,java如何调用c程序等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

大概思路:

写两个程序,一个负责重启的程序,一个是待重启的程序,在这里为了区分我们假设负责重启的那个程序叫A,待重启的程序叫B,他们都是线程,还要搭配数据库,他是两个程序的桥梁,通过设置信号量进行判断程序状态(不妨设置信号量为Flag),我是这么设置的,0:表示程序正在运行中,1:表示程序需要重启,正准备做关闭自己的操作(只针对待重启的程序B),2:表示B程序已经把自己给关闭了,需要A程序把B程序启动。

实现步骤:

A程序:写一个线程进行读信号量Flag,当Flag为2的时候就把B程序启动

B程序:写一个线程进行读信号量Flag,当Flag为1的时候就把自己给关闭(java System.exit(0);)

数据库:需要一个表存Flag的值,创建表restart,并新建一个字段Flag,int(4)noNull

实现细节:

A 程序:

package com.app;

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;

import databasetool.DBtool;

public class ReStart implements Runnable {
  int status = 0;

  public void run() {
    DBtool con = new DBtool();
    ResultSet rs = null;
    String select = "select * from restart";
    String restar = "update restart set status = '0'";// 准备启动程序,设置Status为0,表示已启动
    try {
      int result = con.executeUpdate(restar);
      System.out.println("初始化,并将status状态设置为0,表示程序正常被启动了!");
    } catch (SQLException e) {
      e.printStackTrace();
    }
    while (true) {
      while (true) {
        if (status == 2) {// 2:表示关闭的程序等待重启
          System.out.println("status状态为2,表示需要重新启动数采程序!");
          try {
            int result = con.executeUpdate(restar);
            System.out.println("程序马上就被启动,并将status状态设置为0,表示程序正常运行!");
          } catch (SQLException e) {
            e.printStackTrace();
          }
          String cmd = "cmd /c start E:\\Bats\\MainThread.bat";// pass
          try {
            Process ps = Runtime.getRuntime().exec(cmd);
            ps.waitFor();
          } catch (IOException ioe) {
            ioe.printStackTrace();
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }
        try {
          rs = con.executeQuery(select);
          while (rs.next()) {
            status = rs.getInt("status");
            System.out.println("检测当前状态status:"+status);
          }
        } catch (SQLException e) {
          e.printStackTrace();
        }
        try {
          Thread.sleep(5000);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }
  }

  public static void main(String[] args) {
    ReStart res = new ReStart();
    res.run();
  }

}
</div>

B程序:

package datacollect;

import java.sql.ResultSet;
import java.sql.SQLException;

import databasetool.DBtool;

public class ExitMain implements Runnable {

  @Override
  public void run() {
    DBtool dbtool = new DBtool();
    int status = 0;// 0:表示不需要重启
    ResultSet rs = null;
    String select = "select * from restart";
    String restar = "update restart set status = '2'";// 关闭了程序,等待重启

    // 写日志相关内容

    while (true) {

      try {
        rs = dbtool.executeQuery(select);
        while (rs.next()) {
          status = rs.getInt("status");
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
      if (status == 1) {// 1:表示等待关闭程序
        System.out.println("status状态为1,表示需要关闭当前程序!");
        try {
          int result = dbtool.executeUpdate(restar);
          System.out.println("程序马上就被关闭,并将status状态设置为2,表示程序关闭了,需要重启!");
        } catch (SQLException e) {
          e.printStackTrace();
        }
        System.exit(0);
      }
      try {
        Thread.sleep(5000);
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }

  public static void main(String[] args) {
    ExitMain extm = new ExitMain();
    extm.run();
  }

}
</div>

数据库读取工具类:

package databasetool;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBtool {

  private Connection connection = null;
  public Statement statement = null;
  private ResultSet result = null;


  public DBtool() {
    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        String url = "jdbc:sqlserver://localhost:1433;databaseName=tianjincollect;user=sa;password=123456";
        connection = DriverManager.getConnection(url);
        statement = connection.createStatement();      
      } catch (SQLException ex) {
        System.out.println(ex.getMessage());
      } catch (ClassNotFoundException ex) {
        System.out.println(ex.getMessage());
      }
  }

  public ResultSet executeQuery(String sql) throws SQLException {
    try {
      result = statement.executeQuery(sql);
    } catch (SQLException se) {
      System.out.println("ERROR:" + se.getMessage());     
    }
    return result;
  }

  public int executeUpdate(String sql) throws SQLException {
    int updatenum = 0;
    try {
      updatenum = statement.executeUpdate(sql);
      return updatenum;
    } catch (SQLException se) {
      System.out.println("ERROR:" + se.getMessage()); 
    }
    return updatenum;
  }

  public void free() throws SQLException {
    try {
      if (result != null)
        result.close();
      if (statement != null)
        statement.close();
      if (connection != null)
        connection.close();
    } catch (SQLException se) {
      System.out.println("ERROR:" + se.getMessage());
    }
  }
  public static void main(String[] args) {
    DBtool con = new DBtool();
    ResultSet rs = null;
    String sql = "select * from restart";
    try {
      rs = con.executeQuery(sql);
      while(rs.next()){
        int status = rs.getInt("status");
        System.out.println(status);
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
    sql = "update restart set status = '1'";
    try {
      int result = con.executeUpdate(sql);
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }
}
</div>

以上这篇Java操作另一个Java程序使其重启的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • java程序中指定某个浏览器打开的实现方法
  • Java操作另一个Java程序使其重启的简单实现

相关文章

  • 2017-05-28SpringMVC实现文件的上传和下载实例代码
  • 2017-05-28Java 多线程并发编程_动力节点Java学院整理
  • 2017-05-28JAVAEE中用Session简单实现购物车功能示例代码
  • 2017-05-28Spring Boot使用和配置Druid
  • 2017-05-28JVM教程之Java代码编译和执行的整个过程(二)
  • 2017-05-28java集合遍历的几种方式总结及详细比较
  • 2017-05-28JAVA 中解密RSA算法JS加密实例详解
  • 2017-05-28Spring Boot Redis 集成配置详解
  • 2017-05-28面向对象和面向过程的区别(动力节点java学院整理)
  • 2017-05-28Mybatis实现数据的增删改查实例(CRUD)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java 实现随机验证码功能简单实例
    • java 制作验证码并进行验证实例详解
    • 全面解析SpringBoot自动配置的实现原理
    • Java追加文件内容的三种方法实例代码
    • 详解Spring Boot 定时任务的实现方法
    • 微信开发准备第二步 springmvc mybatis项目结构搭建
    • Java 中IO流字符流详解及实例
    • Spring Boot使用和配置Druid
    • java自带命令行工具jmap、jhat与jinfo的使用实例代码详解
    • Struts2之Action接收请求参数和拦截器详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有