Java:模拟Eclipes的控制台

[url]http://www.cppblog.com/biao/archive/2010/05/20/115859.html[/url]
///
// 类Test是用来测试的,即一个进程,它要求在控制台进行输入输出, 类Terminal模拟了Eclipse的控制台.
///
import java.util.Scanner;

public class Test {
public static void main(String[] args) {
System.out.println("Hi, Console");
System.out.println("Go, Console");

System.out.println("Please input ...");
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
System.out.println("Your input is: " + str);
}
}

///
// 在类Terminal中有三个线程,一个用于监听proc正常的输出,一个监听proc的错误输出,一个用于
// 监听用户输入到控制台的数据,然后把这个数据输出到proc里(对于proc来说是输入)
///
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Scanner;

public class Terminal {

public static void main(String[] args) throws IOException, InterruptedException {
final Process proc = Runtime.getRuntime().exec("java Test");

// Normal input thread
new Thread() {
public void run() {
InputStream in = proc.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

try {
int ch = 0;
while ((ch = reader.read()) != -1) { // 不用readLine是为了防止print没有回车的输出
System.out.print((char) (ch));
}

System.out.println("Process end.");
// 当读取到-1时,说明proc已经结束,所以本程序也应该结束了(或者结束输出线程)
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();

// Error input thread
new Thread() {
public void run() {
InputStream in = proc.getErrorStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = null;

try {
while ((line = reader.readLine()) != null) {
System.err.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();

// System.out.println("Sleep...");
// Thread.sleep(3000); // 程序在这里等待时,在Eclipse的控制台也能进行输入
// 当proc代表的程序结束后,Eclipse才强制在控制台不能进行输入

// Output thread.
// 在输入中按下回车后取得当前行字符(去掉传进来的,只取输入的部分),然后转对方.
new Thread() {
public void run() {
OutputStream out = proc.getOutputStream();
PrintWriter writer = new PrintWriter(out);
Scanner scanner = new Scanner(System.in);
String str = null;
while ((str = scanner.nextLine()) != null) {
writer.println(str);
writer.flush();
}
}
}.start();
}
}


///
// 执行方法:
///
1. 先编译好这两个文件放在同一个文件夹里
2. 在终端里执行: java Terminal
3. 看终端里的提示进行操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值