java模拟dos窗口
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窗口相关推荐
- Java模拟售票窗口代码_java多线程模拟售票,多个窗口售票
package com.ma.thread001; /** * 多线程模拟售票,多个窗口售票 * @author ma * */ public class SellTicktDemo implemen ...
- Java: 在dos窗口输入密码,不要把密码直接显示出来,原来可以这么简单
用下面的方法可以实现在控制台上输入密码时,密码不显示在控制台上:Console cons=System.console(); System.out.print("请输入密码:") ...
- java bat 运行 jar文件_运行bat文件启动java的jar且不弹出DOS窗口,后台运行java的jar包...
本文主要是将java的jar包启动的cmd命令添加到bat文件来执行,且不弹出DOS窗口,也就是后台运行java的jar包. 这里以win10为例 1.新建 一个txt文件,在文件添加以下内容.其中E ...
- java dos 菜单栏_学习java之电脑的常用快捷键和DOS窗口下的常用命令
学习java之电脑的常用快捷键和DOS窗口下的常用命令 电脑一些常用的快捷键 win快捷键: 单独按Windows:显示或隐藏 "开始"功能表 Windows+BREAK:显示&q ...
- bat文件运行java的jar包不弹出dos窗口,开机自启jar包
后台运行不弹dos窗口 %1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALS ...
- matlab调用q外部exe文件,Matlab GUI调用外部程序生成exe,DOS窗口输入问题
本帖最后由 gouliang 于 2019-12-23 09:37 编辑 主程序: clc;clear import java.awt.Robot import java.awt.event.* ke ...
- jar bat dos窗口 隐藏
我们在启动脚本中一般使用类似如下的命令执行一个Java程序: java xxx.xxx.MailClass.class 或: java -jar xxx.jar 这样在Java程序启动 ...
- java模拟多线程买票问题
多线程买票是java中的一个经典案例,其主要思想无非包括2点,synchronized和锁,两者中,前者实现同步,后者为同步的线程提供锁,从而实现多个线程共享同一份资源时候,能够同步进行; 经典的方式 ...
- 微信群控系统制作系列一——java模拟登录网页版微信
PS:很多人咨询我怎么做手机群控系统,因此我开了个制作群控系统的系列,准备分五期讲解群控系统的制作.前两篇是基础内容. 今天做个简单的java模拟登录网页版微信. 既然要做模拟登录,那么我们一定要了解 ...
最新文章
- 各个会议期刊论文录取情况
- FCN全卷积网络随笔
- MIPS指令:常用R型、I型、J型指令编解码表
- RTOS原理与实现12:性能测量
- textarea文本框默认显示文本鼠标点击时清空
- 苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类
- CentOS7.2 安装L2TP/IPSec 服务端/客户端 和部分心得 ( libreswan+xl2tpd )
- 51单片机之实时秒表
- 如何自定义python语法.
- C语言利用switch的简单计算器
- Acer 4750 安装黑苹果_黑苹果系统安装教程之驱动篇
- NCA:九岁已经发起了 DDoS 攻击
- 勒索病毒来袭!及时备份数据吧!
- I03 403-(Python+mysql) 飞机票销售系统
- uiautomatorviewer无法启动
- 盛夏来临,数据中心如何应对
- 汉画轩区块链技术应用智慧酒店提升舒适度节能成本
- QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之【05EC20模组TCP/IP模块AT指令说明】
- linux命令行下写for语句,Linux命令行 – 流程控制:for 循环
- JS-BOM对象概叙