首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从java关闭cmd提示符

如何从java关闭cmd提示符
EN

Stack Overflow用户
提问于 2014-06-22 09:10:43
回答 1查看 2K关注 0票数 0

我在做一个CLI。可以从每个选项中选择多个选项,执行一个“runnable-jar”文件。一切都如期而至。有一个选项是“退出计划”。问题是,当选择退出方案选项时,程序将按预期停止,但尽管放置了“退出”,cmd窗口仍未关闭。目标环境是Java1.7的Windows 2012

请帮助如何实现这一点?

下面是这个项目的样本。

代码语言:javascript
复制
    J:\Generated>java -jar MainMenu.jar

    --------------------------------------

    ConnectAnalyzer
    --------------------------------------
    Enter option:
    1. Send Email
    2. sss
    3. Exit Programme
    []--cursor is here 

这就是按3时会发生的情况。

代码语言:javascript
复制
J:\Generated>exit
Return code = 1

J:\Generated>[]--cursor is here 

下面是MainMenu.java的来源。这条线起作用

代码语言:javascript
复制
 stdin.println("cmd.exe /c start exit");

如预期的那样。打开cmd提示符并在瞬间关闭它。

代码语言:javascript
复制
    package com;
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    class SystemProcess implements Runnable
    {
    public SystemProcess(InputStream istrm, OutputStream ostrm) {
          istrm_ = istrm;
          ostrm_ = ostrm;
      }
      public void run() {
          try
          {
              final byte[] buffer = new byte[1024];
              for (int length = 0; (length = istrm_.read(buffer)) != -1; )
              {
                  ostrm_.write(buffer, 0, length);
              }
          }
          catch (Exception e)
          {
              e.printStackTrace();
          }
      }
      private final OutputStream ostrm_;
      private final InputStream istrm_;
    }


    public class MainMenu {

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

                   boolean status = true;
            while(status){
                  System.out.println("");
                  System.out.println("---------------------------------------------------------------------------");
                  System.out.println("");

                  System.out.println("ConnectAnalyzer");

                  System.out.println("---------------------------------------------------------------------------");
                  System.out.println("Enter option: ");
                  System.out.println("1. Send Email");
                  System.out.println("2. sss");
                  System.out.println("3. Exit Programme");

                    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

                    String option = null;
                    option = br.readLine();
                    int i = Integer.parseInt(option);
                    switch(i){

                    case 1: {
                          Runtime rt = Runtime.getRuntime();
                          rt.exec("cmd.exe /c start exec.bat");
                            }
                            ;break;
                    case 2:System.out.println(i+"SUB");
                            break;
                    case 3:{
                         String[] command =
                            {   
                                "cmd",
                            };
                            Process p = Runtime.getRuntime().exec(command);
                            new Thread(new SystemProcess(p.getErrorStream(), System.err)).start();
                            new Thread(new SystemProcess(p.getInputStream(), System.out)).start();
                            PrintWriter stdin = new PrintWriter(p.getOutputStream());
 // stdin.println("put whatever command you wish here");                        
//    stdin.println("dir J:\\ /A /Q");
                            stdin.println("cmd.exe /c start exit");
                        //    stdin.println("java -jar J:/Generated/Testimg.jar");

                            stdin.println("exit");

                            stdin.close();

                       int returnCode = p.waitFor();
                           System.out.println("Return code = " + returnCode);
                        System.exit(1);
                    }
                    default: System.out.println("Invalid Option. Try again");
                            break;
            }



            }
    }
    }

我试过了

代码语言:javascript
复制
p.destroy();

这不会关闭cmd提示符。

我看到的唯一选项是使用taskkill /PID <int_pid>,但我不知道如何获得pid。

EN

回答 1

Stack Overflow用户

发布于 2014-06-22 09:16:07

我认为从您的java代码中执行DOS命令exit应该有效。但是,只有当用户直接从先前打开的命令提示符窗口启动java程序时,这才是相关的。

我认为更明确的解决方案是在批处理文件级别解决这个问题。批处理文件应该运行您的java程序,并且当它终止时(可能使用预定义的退出代码-例如-1)执行exit

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24349776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档