`
nlslzf
  • 浏览: 1044990 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java:模拟Eclipes的控制台

    博客分类:
  • java
阅读更多
http://www.cppblog.com/biao/archive/2010/05/20/115859.html
///////////////////////////////////////////////////////////////////////////////
// 类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. 看终端里的提示进行操作
分享到:
评论

相关推荐

    Java EE Web编程(Eclipse 平台)

    Java EE,全称为Java Platform, Enterprise Edition,是Java平台针对企业级应用开发的规范。它提供了构建分布式、多层的企业级应用程序所需的框架和服务。在Eclipse平台上进行Java EE Web编程,意味着开发者可以利用...

    java_eclipes_Apache_tomcat环境配置

    Java Eclipse Apache Tomcat环境配置是开发Java Web应用的关键步骤,涉及到多个组件的集成与设置。以下将详细讲解这个过程,以及如何实现Apache Tomcat的负载均衡配置。 首先,我们需要了解Java Eclipse,它是一款...

    xfire根据WSDL生成客户端代码

    XFire(现已被Apache CXF项目合并)是一个Java框架,它支持SOAP(Simple Object Access Protocol)和WS-*规范,帮助开发者构建和消费Web服务。 本文将详细介绍如何使用XFire根据WSDL文件生成客户端代码,以便快速地...

    Eclipse配色方案

    每天对着电脑屏幕!Eclipse惨白的界面搞得人眼都花了!在网上找了很多的配色资源,希望可以缓解一下眼部的疲劳,但是很多配色方案把颜色搞得很复杂,不但没有起到保护视力,打造舒适开发环境的作用,反而把屏幕搞得...

    学习eclipes

    Eclipes的界面主要包括菜单栏、工具栏、透视图、编辑器、问题视图和控制台等部分。透视图允许用户根据不同的工作需求定制工作区,编辑器则提供代码编写和调试的功能。学习Eclipes时,要熟练掌握创建项目、导入导出...

    Eclipse的下载与使用

    Eclipse是一个广泛使用的Java集成开发环境(IDE),由Eclipse基金会管理,最初由IBM捐出其商业软件开发工具VisualAge for Java作为初始代码基础。Eclipse以其开放源码的特性、高度可扩展性以及丰富的插件生态而闻名...

    Eclipes3.2.1中文版

    Eclipse3.2.1版+3.2.1版汉化包+详细汉化方法!! Java编程最普及的工具!功能强大,极大限度的提高您的编程效率!(因为程序较大,分为18卷,请全部下载完成后一起解压!)

    Java+Swing+Mysql实现学生信息管理系统

    **Java技术**:Java是一种跨平台的面向对象的编程语言,具有良好的可移植性、安全性和高效性。在这个系统中,Java被用来编写后端逻辑和与数据库交互的部分,确保了系统的稳定性和灵活性。 **Swing框架**:Swing是...

    JAB(java access bridge)安装和使用

    Java Access Bridge(JAB)是Oracle公司开发的一个技术,它为Java应用程序提供了与Windows操作系统辅助技术(如屏幕阅读器)的交互能力。JAB使得基于Java的用户界面能够被无障碍访问,这对于视障用户或者有其他特殊...

    Eclipes运行配置Eclipes

    - 提供的内容中包含了一些 Java 代码片段,虽然不完整但可以看出使用了多种 Java 技术,如字符串处理、数组操作等。 #### 五、常见问题及解决方案 - **无法找到主类**:确保在运行配置中正确指定了主类。 - **...

    eclipes软件

    开发必备,上手简单方便,网上许多教程

    设计开发的一套图书馆管理系统java,mysql

    【标题】:“设计开发的一套图书馆管理系统java,mysql”揭示了这是一个使用Java编程语言和MySQL数据库构建的图书馆信息管理系统。这个系统是为了解决图书馆日常运营中的书籍管理、读者服务和内部工作流程自动化等...

    MyEclipes/Eclipes的jadclipse反编译插件

    2. **jad反编译器**:jad是Java反编译器的一种,它可以将Java字节码转换回接近原始的Java源代码,虽然可能无法完全恢复到原始状态,但依然能提供很大的帮助。jad是开源的,可以单独使用,也可以通过jadclipse插件在...

    Eclipes下运行Android时出现类似错误:Connection attempts:

    Eclipes下运行Android时出现类似错误:Connection attempts:1 Connection attempts:2 Connection attempts:3 Connection attempts:4 Connection attempts:5

    Eclipes3.2.1中文版(8)

    Eclipse3.2.1版+3.2.1版汉化包+详细汉化方法!! Java编程最普及的工具!功能强大,极大限度的提高您的编程效率!(因为程序较大,分为18卷,请全部下载完成后一起解压!)

    visual swing for eclipes插件(含安装教程) java可视化界面设计插件

    在Java开发领域,创建用户界面(UI)通常是一项繁琐的任务,尤其当涉及到复杂的桌面应用程序时。然而,通过使用像Visual Swing这样的工具,开发者可以借助图形化界面来设计和构建UI,实现“所见即所得”(WYSIWYG)...

    Eclipes3.2.1中文版(10)

    Eclipse3.2.1版+3.2.1版汉化包+详细汉化方法!! Java编程最普及的工具!功能强大,极大限度的提高您的编程效率!(因为程序较大,分为18卷,请全部下载完成后一起解压!)

    Json for Java 示例程序(eclipse工程)

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于Java应用程序中与其他系统进行数据交互。在Java中,有多个库可以帮助我们处理JSON,其中最常用的包括`org.json`、`com.google.gson`和`...

Global site tag (gtag.js) - Google Analytics