做个像tocmat那样,写一个startup.bat启动一个java应用,再写一个shutdown.bat来关闭该应用

废话少说,直接看代码吧,

startup向主程序传入一个启动命令,主程序启动socket侦听来等待关闭消息,shutdown.bat启动时,给主程序函数传入一个关闭命令,主函数向侦听socket端口发一个关闭消息。

startup.bat

set CURRENT_DIR=%cd% set EXECUTABLE=%CURRENT_DIR%/decs-run.bat

if exist "%EXECUTABLE%" goto okExec echo Cannot find %EXECUTABLE% echo This file is needed to run this program goto end

:okExec call "%EXECUTABLE%" start

:end

shutdown.bat

set CURRENT_DIR=%cd% set EXECUTABLE=%CURRENT_DIR%/run.bat

if exist "%EXECUTABLE%" goto okExec echo Cannot find %EXECUTABLE% echo This file is needed to run this program goto end

:okExec call "%EXECUTABLE%" stop

:end

run.bat

@echo off

rem excutable env check

if not "%JAVA_HOME%" == "" goto gotJdkHome if not "%JRE_HOME%" == "" goto gotJreHome echo Neither the JAVA_HOME nor the JRE_HOME environment variable is defined echo At least one of these environment variable is needed to run this program goto exit

:gotJreHome if exist "%JRE_HOME%/bin/java.exe" goto okJavaHome echo JAVA_HOME should point to a JDK in order to run. goto exit

:gotJdkHome if not exist "%JAVA_HOME%/bin/java.exe" goto noJavaHome set JRE_HOME=%JAVA_HOME% goto okJavaHome

:noJavaHome echo The JAVA_HOME environment variable is not defined correctly echo This environment variable is needed to run this program echo NB: JAVA_HOME should point to a JDK not a JRE goto exit

:okJavaHome

set CURRENT_DIR=%cd% set WEBINF_HOME = "..//..//..//" echo %WEBINF_HOME% cd %CURRENT_DIR%

set CLASSPATH=.;your-classpath

start java -classpath %CLASSPATH%  Bootstrap "%1"


public class Bootstrap extends Thread{



static Logger log = Logger.getLogger(Bootstrap.class);



static final String HOST = "127.0.0.1";

static final int PORT = 5122;

static final String COMM_STOP = "stop";

static final String COMM_START= "start";





public void run(){



BufferedReader reader = null;

Socket socket = null;



Runner runner = new Runner();

try{

runner.start();



ServerSocket serverSocket = new ServerSocket(PORT);

socket = serverSocket.accept();

reader = new BufferedReader(new InputStreamReader( socket.getInputStream()));

while(true){

String s = reader.readLine();

if(COMM_STOP.equalsIgnoreCase(s)){

break;

}

yield();

}



System.exit(0);



}catch(Exception ex){ log.error(ex.toString());

}finally{

if( null != reader){

try{

reader.close();

}catch(Exception ex){

}

}

if( null != socket){

try{

socket.close();

}catch(Exception ex){

}

}

}

}



public static void main(String[] args) throws Exception{

if(null == args || args.length != 1){

System.exit(1);

}



String command = args[0];



if( COMM_START.equalsIgnoreCase(command) ){

( new Bootstrap()).start();

Runtime.getRuntime().addShutdownHook(new Thread(){

public void run(){

ImportWatcher.getInstance().Stop();

}

});



}else if(COMM_STOP.equalsIgnoreCase(command)){

Socket socket = null;

PrintStream out = null;

try{

socket = new Socket(HOST, PORT);

out = new PrintStream(socket.getOutputStream());

out.println(command);

}catch(Exception ex){

System.out.println(ex.toString());

}finally{

if(null != out){

out.close();

}

if( null !=socket){

socket.close();

}

}

}else{

log.error("unsupported:" + command);

}



}



final class Runner extends Thread {



private volatile boolean isStop = false;



public void run(){



while(!isStop){

try{

// 启动你的应用

}catch(Exception e){

log.error e);

break;

}



try {

sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}



public void close(){

isStop = true;

}

}

}



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值