- 浏览: 253542 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (97)
- Java (28)
- .Net (1)
- Ruby & Rails (4)
- Review (0)
- AJAX (3)
- Architecture (0)
- Database (1)
- Design Patterns (0)
- IT News (0)
- Java EE (1)
- Java SE (0)
- Reviews (1)
- Software Engineering (6)
- Python & Jython (1)
- OGSi (0)
- Fortran (2)
- Groovy & Grails (1)
- C/C++ (1)
- Miscellaneous (6)
- Linux (6)
- Java Script (0)
- CSS (0)
- PHP (1)
- C# (0)
最新评论
-
zhangyou1010:
看看人家CSDN多NB, 在线调试程序 -
hxcan:
非常感谢。
Photran--一个FORTRAN语言的IDE -
kimmking:
lewhwa 写道看看人家CSDN多NB, 首页在线调试
程序 ...
看看人家CSDN多NB, 在线调试程序 -
codeutil:
csdn不是asp.net写的了?
看看人家CSDN多NB, 在线调试程序 -
wsc830719:
1G内存就足够了! 我用的神舟本,cm1.86G处理器,后来加 ...
NetBeans 7.0 ML使用印象
几乎所有的Java 集成开发环境都需要调用外部进程进行Java程序的构建,编译,运行和调试,Eclipse,NetBeans,JBuilder和Intellij IDLE概莫例外。在执行过程中,将提示信息以黑色全部打印在控制台里,将异常和错误以红色方式打印。以非常醒目交互体验让程序员远离枯燥和乏味。
现在让我们以Eclipse为例来看看它如何工作的,以揭开它神秘面纱,探究隐藏在后面的秘密。
首先,我们准备一个Java 程序,程序如下所示:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
*
* @author lewhwa
*/
public class HelloWorld {
public static void main(String[] args) throws IOException {
System.out.println( " Where will you go to? " );
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(isr);
String name = reader.readLine();
if (name.toUpperCase().equals( " HEAVEN " )) {
System.out.println( " Welcome to heaven! " );
}
if (name.toUpperCase().equals( " HELL " )){
System.err.println( " Go away!here is hell " );
}
}
}
当运行程序等待输入时,当输入为“heaven”时。在Eclipse的控制台输出如图1所示:
图1
看来,在Eclipse控制台的标准输出(stdout,System.out)在控制台中的显示为为黑色;标准输入(stdin,System.in)的显示为绿色。那么,标准错误输出是咋样的呢?
再次运行程序,当输入为“Hell”时。在Eclipse的控制台输出如图2所示:
图2
哦,标准错误输出(stderr,System.err)在Eclipse的控制台输出为绿色。
我们知道,在Linux的Shell或者在Windows的Command Prompt窗口执行程序,可以在屏幕上打印stdin,stdout,stderr的消息。在Windows上执行时,将弹出一个Command Prompt窗口。在VC下写过Console程序的应该知道,VC在执行这些程序时,也马上弹出一个这样的窗口。如果程序执行太快,将一闪而过。可是在诸如Eclipse之类的Java IDE里面,并没有弹出这样的窗口。我们禁不住要问,它们应用了什么技巧?
无论VC,还是像Eclipse这样的IDE,执行程序,实际上是在自己的进程里产生了另外一个子进程,这点谁也比谁强不了多少。但是,VC是直接将运行的console程序直接产生一个Command Prompt窗口。其输入和输出均放置到那个窗口里。而Eclipse则将这些输入和输出重定向到了自己的Console里。原来一直在像,Eclipse一定采用了什么动态链接库之类的东东来做这些。
直到有一天使用NetBeans,它完全使用Java,是纯Java的。作为IDE,也是将Console程序的输入和输出均在IDE 自己Console显示。这样,我才明白,一定在Java API里有这样的功能:能将外部程序的输入和输出进行拦截,然后在重定向到其它的地方。
重新梳理了一下思路,原来使用过Runtime.exec()这样的东东,是否所有的一切与之有关呢?但只是打开Notepad查看一下某个文本文件之类的应用,搞定也就pass了,没有深究。
仔细查了查这个类,终于发现了这个秘密。秘密就在Process这个类。Runtime.getRuntime.exec()执行外部程序后,将返回一个Process对象。Process有三个函数与此有关:
getInputStream();
getErrorStream();
getOutputStream();
到此,我们大概已经知道Process是Java IDE完成输出输入流拦截的关键所在。下篇,我们将利用此技术在自己的应用中实现这种技术。
评论
Process p = new ProcessBuilder("ipconfig").start(); InputStream is = p.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line; while ((line = br.readLine()) != null) { System.out.println(line); }
看看下篇,TIJ有么?
发表评论
-
CASE工具网址
2010-11-06 22:27 966各种软件辅助设计工具层出不穷,下面有一个相对完整的UML工具列 ... -
Java Mail API
2009-01-29 00:36 1477Today,I meets a problem on java ... -
NetBeans 7.0 ML使用印象
2008-12-21 19:23 3785看到新闻《NetBeans7.0M1 发布》htt ... -
Nimbus Look and Feel
2008-11-29 21:14 2205imbus Look and Feel When the ve ... -
NetBeans 6.0 最终版发布并提供下载
2007-12-03 20:16 1838经过Beta1,Beta2和RC1和RC2之后,NetBean ... -
NetBeans 6.0 Beta2释出
2007-10-24 22:36 3528NetBeans IDE Beta 2现已提供下载,下 ... -
NetBeans 6.0 Beta is available!
2007-09-18 08:53 3601NetBeans.org is proud to announ ... -
NetBeans IDE 6.0 Milestone 10 (M10) Available!
2007-07-03 08:44 10262随着Eclipse 3.3(Europa)的发布,NetBea ... -
Swing应用程序框架(Swing Application Framework)API绪论(JSR-296)之二(翻译)
2007-05-20 21:52 2735用 @Action 标注定义动作 @Action标注打算作为A ... -
Swing应用程序框架(Swing Application Framework)API绪论(JSR-296)之一(翻译)
2007-05-20 21:50 3078概述 本文档是原型Swing应用程序框架的简介,目标读者是那些 ... -
NetBeans Mangazine 第三期发布
2007-05-10 23:42 1489NetBeans Mangazine– 第三期 –2007 ... -
Swing应用程序框架(Swing Application Framework)项目简介
2007-05-07 02:53 5422原来采用Java开发GUI桌面应用程序时自己 ... -
NetBeans 在Redhat Enterprise Linux 5.0 64位版本上的安装
2007-05-07 02:51 3229由于项目的需求,需要在Redhat Enterprise Li ... -
Java调用外部进程并拦截输出流--Java IDE Console解密(下篇)
2007-01-15 23:40 3533几乎所有的Java 集成开发环境都需要调用外部进程进行Java ... -
Re: 琴瑟和鸣--让同一项目在NetBeans和Eclipse平台下和谐相处,协同开发
2007-01-05 21:45 1506[quote="lighter"]有意思的 ... -
Re: 琴瑟和鸣--让同一项目在NetBeans和Eclipse平台下和谐相处,协同开发
2007-01-05 21:44 1407[quote="zzsczz"]有违法的可 ... -
Re: 琴瑟和鸣--让同一项目在NetBeans和Eclipse平台下和谐相处,协同开发
2007-01-05 21:44 1446[quote="zzsczz"]似乎... ... -
琴瑟和鸣--让同一项目在NetBeans和Eclipse平台下和谐相处,协同开发
2007-01-01 02:33 4036在Java IDE世界里,Eclipse和NetBeans是平 ... -
JBuilder 2007 企业版Trial提供下载
2006-12-24 23:46 7398越接近年关,Java IDE世界真是好戏连连,先是Sun在11 ... -
Sun 在圣诞节前送出的最后礼物-NetBeans 5.5多国语言版释出!
2006-12-20 23:03 2211JBuilder在Eclipse的穷追猛 ...
相关推荐
JAVA调用外部程序 用JAVA调用外部程序并截出程序运行结果
通过java应用程序动态调用外部jar文件。
java 调用 powershell 并传参 返回
JAVA调用外接设备(制卡机)---JQuery跨域,AJAX跨域问题
java调用matlab程序的一个applet-java调用matlab.txt 最近在做java实现多Agent,如有同志可相互切磋,现附上一段java调用matlab程序的程序,希望能帮到有需要的同仁。
Java调用Win32获取窗口句柄JNative-1.3.2 Java调用Win32获取窗口句柄JNative-1.3.2
java调用Linux命令获取输出流,用于解决获取不到输出流的方法
java调用.NET webAPI httpclient-4.2.5.jar httpclient-cache-4.2.5.jar httpcore-4.2.4.jar httpmime-4.2.5.jar fluent-hc-4.2.5.jar commons-codec-1.6.jar
java中两种方式调用其他.exe可执行程序
F:\Work\Study\功能点技术\java调用可执行文件\Java调用外部程序命令.doc
JAVA调用外接设备(制卡机)-文档概述,JQuery跨域解决方案
java通过url调用外部接口,返回字符串,再讲字符串解析成json格式。包含源码和jar包,直接运行即可,带注释。
java调用json参数的webservice 涉及技术: JAVA JSON WEBSERVICE
java调用ocx控件,jacob,jar和dll文件
java调用Gmssl中国密接口进行对称与非对称加解密等运算,动态so库进行接口jni方式调用,采取接口形式对外暴露,方便对接系统调用相关java接口进行相关运算操作。
java 调用matlab的函数,把matlab的函数封装在java的类里
java中调用kettle中的job与转换源码,其中kettle用的是5.2.0.0的版本。已经测试过可以调用访问,并且可以传入参数调用。有需要的可直接拿去使用。
使用Java语言调用终端开启关闭Nginx服务器,然后执行ffmpeg命令,开启转流推流。以及其它指令,来学习吧
项目需要将一个外部软件嵌入自己编写的qt界面,类似于将外部程序当作自己软件的一个插件,以起到集成的目的。笔者这里用电脑自带的计算器为例。 传统做法: 1)首先打开需要的外部程序; 2)通过spy+获取的外部程序...
Java调用MATLAB的实例,详细,照本宣科即可