2019独角兽企业重金招聘Python工程师标准>>>

原来这么简单:

package runtimeTest;import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Scanner;public class ProcTest {/*** @param args*/public static void main(String[] args) {Process process = null;try {process = Runtime.getRuntime().exec("cmd");} catch (IOException e) {e.printStackTrace();}new Thread(new ProcRunnable(process.getInputStream())).start();new Thread(new ProcRunnable(process.getErrorStream())).start();PrintWriter out = new PrintWriter(process.getOutputStream());java.util.Scanner in = new java.util.Scanner(System.in);while(in.hasNextLine()){out.println(in.nextLine());out.flush();}}
}
class ProcRunnable implements Runnable{InputStream inputStream = null;String name;public ProcRunnable(InputStream inputStream){this.inputStream = inputStream;}@Overridepublic void run() {Scanner scanner = new Scanner(inputStream);while(scanner.hasNextLine()){System.out.println(scanner.nextLine());}try {inputStream.close();} catch (IOException e) {e.printStackTrace();}scanner.close();}
}

这种方法最直接,但是没有下一行时,scanner.hasNextLine()会阻塞在那边,直到下一个换行符。
所以这样感觉和dos窗口有少许区别:dos窗口有一个如“c:\Users\macondo>_”这样的东西提示你输入下一个命令;而以上程序效果是你输入命令后那个提示才出来。原因是那个提示后面没有换行符,等到有换行符时才会被输出。

下面是一种解决方法:用timer定时检查inputstream,有东西就把它输出来:

package cmd;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;public class cmd {public static void main(String...args) {Process process = null;PrintWriter writer = null;final byte[] b = new byte[1024];try {process = Runtime.getRuntime().exec("cmd");writer = new PrintWriter(process.getOutputStream());} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}final InputStream inputStream = process.getInputStream();final InputStream err = process.getErrorStream();java.util.Scanner scanner = new java.util.Scanner(System.in);javax.swing.Timer timer = new javax.swing.Timer(500,new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubtry{while(inputStream.available()>0){int c = inputStream.read(b,0,b.length);System.out.print(new String(b,0,c));}}catch (Exception ee) {// TODO: handle exception}try{while(err.available()>0){int c = err.read(b,0,b.length);System.out.print(new String(b,0,c));}}catch (Exception ee) {// TODO: handle exception}}});timer.start();while(scanner.hasNextLine()){         writer.println(scanner.nextLine());writer.flush();}}
}

以上两种方法都有一个和dos不同的地方,因为在同一个console里面输入,你输入一个命令,outputstream又会把那个命令重复输出一遍。这个好解决,不用让它输出到console,做个jframe,从jtextfield里输入,输出到jtextarea就行了

另外,按下tab建没有自动提示功能,要做到这个可能有难度

转载于:https://my.oschina.net/soitravel/blog/35126

java模拟dos窗口相关推荐

  1. Java模拟售票窗口代码_java多线程模拟售票,多个窗口售票

    package com.ma.thread001; /** * 多线程模拟售票,多个窗口售票 * @author ma * */ public class SellTicktDemo implemen ...

  2. Java: 在dos窗口输入密码,不要把密码直接显示出来,原来可以这么简单

    用下面的方法可以实现在控制台上输入密码时,密码不显示在控制台上:Console cons=System.console();  System.out.print("请输入密码:") ...

  3. java bat 运行 jar文件_运行bat文件启动java的jar且不弹出DOS窗口,后台运行java的jar包...

    本文主要是将java的jar包启动的cmd命令添加到bat文件来执行,且不弹出DOS窗口,也就是后台运行java的jar包. 这里以win10为例 1.新建 一个txt文件,在文件添加以下内容.其中E ...

  4. java dos 菜单栏_学习java之电脑的常用快捷键和DOS窗口下的常用命令

    学习java之电脑的常用快捷键和DOS窗口下的常用命令 电脑一些常用的快捷键 win快捷键: 单独按Windows:显示或隐藏 "开始"功能表 Windows+BREAK:显示&q ...

  5. bat文件运行java的jar包不弹出dos窗口,开机自启jar包

    后台运行不弹dos窗口 %1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALS ...

  6. matlab调用q外部exe文件,Matlab GUI调用外部程序生成exe,DOS窗口输入问题

    本帖最后由 gouliang 于 2019-12-23 09:37 编辑 主程序: clc;clear import java.awt.Robot import java.awt.event.* ke ...

  7. jar bat dos窗口 隐藏

    我们在启动脚本中一般使用类似如下的命令执行一个Java程序:     java xxx.xxx.MailClass.class 或:     java -jar xxx.jar 这样在Java程序启动 ...

  8. java模拟多线程买票问题

    多线程买票是java中的一个经典案例,其主要思想无非包括2点,synchronized和锁,两者中,前者实现同步,后者为同步的线程提供锁,从而实现多个线程共享同一份资源时候,能够同步进行; 经典的方式 ...

  9. 微信群控系统制作系列一——java模拟登录网页版微信

    PS:很多人咨询我怎么做手机群控系统,因此我开了个制作群控系统的系列,准备分五期讲解群控系统的制作.前两篇是基础内容. 今天做个简单的java模拟登录网页版微信. 既然要做模拟登录,那么我们一定要了解 ...

最新文章

  1. 各个会议期刊论文录取情况
  2. FCN全卷积网络随笔
  3. MIPS指令:常用R型、I型、J型指令编解码表
  4. RTOS原理与实现12:性能测量
  5. textarea文本框默认显示文本鼠标点击时清空
  6. 苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类
  7. CentOS7.2 安装L2TP/IPSec 服务端/客户端 和部分心得 ( libreswan+xl2tpd )
  8. 51单片机之实时秒表
  9. 如何自定义python语法.
  10. C语言利用switch的简单计算器
  11. Acer 4750 安装黑苹果_黑苹果系统安装教程之驱动篇
  12. NCA:九岁已经发起了 DDoS 攻击
  13. 勒索病毒来袭!及时备份数据吧!
  14. I03 403-(Python+mysql) 飞机票销售系统
  15. uiautomatorviewer无法启动
  16. 盛夏来临,数据中心如何应对
  17. 汉画轩区块链技术应用智慧酒店提升舒适度节能成本
  18. QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之【05EC20模组TCP/IP模块AT指令说明】
  19. linux命令行下写for语句,Linux命令行 – 流程控制:for 循环
  20. JS-BOM对象概叙

热门文章

  1. cisco学习笔记(6)-acl
  2. Java学习系列及数据结构博客全目录
  3. Android手机中第三方签名应用程序无法获得的permission
  4. iOS | NSProxy
  5. 静态变量和实例变量的区别。
  6. JavaScript数组的高级用法-reduce和reduceRight详解
  7. 通过迁移的方式解决Active Directory服务器问题之6
  8. 域环境安装企业从属CA两种方法
  9. 自助出版风靡美国的7个理由(转载)
  10. OpenEMR登录模块SQL注入分析