java程序自动重启

来源:互联网 发布:数据录入员的工资 编辑:程序博客网 时间:2024/05/01 15:52
 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

public class Test {
 /**
  * 用于判断退出的标识语
  */
 private final static String  EXIT_IDENT ="BRIDGE UNEXPECTED DISCONNECTED FROM QUEUE AND TOPICS";
 public static void main(String[] args) {
  new Test().check();
 }

 /**
  * 判断可执行文件是否正常运行,如果没有运行则调用重启方法
  */
 public void check(){
  BufferedReader bufferedreader = null;
  try {
   Process proc = Runtime.getRuntime().exec(" tasklist /fi \" imagename eq msxRun.exe \" ");
   bufferedreader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
   String line = null;
   while ((line = bufferedreader.readLine()) != null) {
    if (!line.contains("msxRun.exe")) {
     //重启前停顿1秒
     Thread.sleep(1000);
     restrat();
    }
   }
  } catch (Exception ex) {} finally {
   if (bufferedreader != null) {
    try {
     bufferedreader.close();
    } catch (Exception ex) {}
   }
  }
  
 }
 /**
  * 重启方法
  */
 public void restrat() {
  try {
   Process p = Runtime.getRuntime().exec("d:/msxRun.exe");
   BufferedReader read = new BufferedReader(new InputStreamReader(p.getInputStream()));
   String str = null;
   while ((str = read.readLine()) != null) {
    System.out.println(str);
    if (str.contains(EXIT_IDENT)) {
     //通知对方停止并退出
     Socket socket = null;
     PrintStream ps = null;
     try {
      // 使用端口2525实例化一个本地套接字
      socket = new Socket(Constants.SERVER_ADDRESS, Constants.SERVER_PORT);
      ps = new PrintStream(socket.getOutputStream());
      // 将ps指向soc的输出流
      ps.println("EXIT");
      ps.flush();
     } catch (IOException e) {

     } finally {
      ps.close();
      socket.close();
     }
    }
   }
   System.out.println("====================================");
   //递归调用
   check();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

}

原创粉丝点击