简体   繁体   English

Java程序在批处理文件中完成命令之前终止

[英]Java program terminates before completion of command in batch file

I am trying to exceute batch file from a Java program. 我试图从Java程序中删除批处理文件。

The batch file has a command which connects to IBM RTC then gets some data which takes around 30 seconds. 批处理文件有一个连接到IBM RTC的命令,然后获取一些大约需要30秒的数据。

But the program is exiting just after the command is run without waiting for the output. 但是程序在命令运行后退出而不等待输出。

public static void main(String[] args) {

    final String scmCommand = "cmd /c  D:\\Coverage\\SCMHistory.bat";       
    try {
        Process process = Runtime.getRuntime().exec(scmCommand);
        /*
         * final InputStream in = process.getInputStream(); int ch;
         * while((ch = in.read()) != -1) { System.out.print((char)ch); }
         * final int returnCode = process.waitFor();
         */
        try (final BufferedReader b = new BufferedReader(
                new InputStreamReader(process.getInputStream()))) {
            String line;

            while ((line = b.readLine()) != null) {
                System.out.println(line);
            }
        }
        **System.out.println("waiting for the process");
        process.waitFor();
        System.out.println("waiting done");**

    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

I have tried adding process.waitFor(); 我试过添加process.waitFor(); but it didnt work. 但它没有用。

set scm_path=D:\Coverage\RTC\jazz\scmtools\eclipse
set userId=ADMIN
set pwd=ADMIN
set repWorkspace="1081"
%scm_path%\scm show history -r https://rtc.repo.com:9443/jazz/ -u %userId% -P %pwd% -w "1411.201411" --component core_as D:\Work\201411\make\main_metadata.xml



Out put of which is 
Change sets:
(3129) ----$ Sumit, HARI"main metadata is updated to deploy ch..." 03-Mar-2015 04:09 PM
(3130) ----$Sumit, HARI" "Fixed PartyID issue, checked in  " 03-Mar-2015 01:01 PM
(3131) ----$ Sumit, HARI"  "adding project to main_metada xml file" 26-Feb-2015 02:46 PM

Use start with the /w or start /wait option to run your program in the batch file. 使用start/wstart /wait选项在批处理文件运行程序。

Example

Start "" /w program options ...

Source Start a program, command or batch script (opens in a new window.) 启动程序,命令或批处理脚本(在新窗口中打开。)

Syntax 句法

START "title" [/D path] [options] "command" [parameters]

Options: 选项:

/W or /WAIT Start application and wait for it to terminate. /W/WAIT启动应用程序并等待它终止。 (for an internal cmd command or a batch file this runs CMD /K ) (对于内部cmd命令或批处理文件,它运行CMD /K

your batch file is starting a new console window and terminating, even if you use start instead of cmd. 您的批处理文件正在启动一个新的控制台窗口并终止,即使您使用start而不是cmd。 also the /c definition, 还有/ c定义,

/c Carries out the command specified by string and then terminates / c执行string指定的命令,然后终止

try this instead, 试试这个,

final String scmCommand = "D:\\Coverage\\SCMHistory.bat";

if this does not work try this, 如果这不起作用试试这个,

final String scmCommand = "D:\Coverage\RTC\jazz\scmtools\eclipse\scm"; 
String[] envp = new String[5];
envp[0] = "-r https://rtc.repo.com:9443/jazz/";
envp[1] = "-u ADMIN";
envp[2] = "-P ADMIN";
envp[3] = "-w \"1411.201411\" ";
envp[4] = "--component core_as D:\Work\201411\make\main_metadata.xml";  

Process process = Runtime.getRuntime().exec(scmCommand, envp);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM