- 浏览: 257836 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1023各种软件辅助设计工具层出不穷,下面有一个相对完整的UML工具列 ... -
Java Mail API
2009-01-29 00:36 1539Today,I meets a problem on java ... -
NetBeans 7.0 ML使用印象
2008-12-21 19:23 3869看到新闻《NetBeans7.0M1 发布》htt ... -
Nimbus Look and Feel
2008-11-29 21:14 2246imbus Look and Feel When the ve ... -
NetBeans 6.0 最终版发布并提供下载
2007-12-03 20:16 1888经过Beta1,Beta2和RC1和RC2之后,NetBean ... -
NetBeans 6.0 Beta2释出
2007-10-24 22:36 3599NetBeans IDE Beta 2现已提供下载,下 ... -
NetBeans 6.0 Beta is available!
2007-09-18 08:53 3641NetBeans.org is proud to announ ... -
NetBeans IDE 6.0 Milestone 10 (M10) Available!
2007-07-03 08:44 10311随着Eclipse 3.3(Europa)的发布,NetBea ... -
Swing应用程序框架(Swing Application Framework)API绪论(JSR-296)之二(翻译)
2007-05-20 21:52 2785用 @Action 标注定义动作 @Action标注打算作为A ... -
Swing应用程序框架(Swing Application Framework)API绪论(JSR-296)之一(翻译)
2007-05-20 21:50 3125概述 本文档是原型Swing应用程序框架的简介,目标读者是那些 ... -
NetBeans Mangazine 第三期发布
2007-05-10 23:42 1543NetBeans Mangazine– 第三期 –2007 ... -
Swing应用程序框架(Swing Application Framework)项目简介
2007-05-07 02:53 5479原来采用Java开发GUI桌面应用程序时自己 ... -
NetBeans 在Redhat Enterprise Linux 5.0 64位版本上的安装
2007-05-07 02:51 3268由于项目的需求,需要在Redhat Enterprise Li ... -
Java调用外部进程并拦截输出流--Java IDE Console解密(下篇)
2007-01-15 23:40 3589几乎所有的Java 集成开发环境都需要调用外部进程进行Java ... -
Re: 琴瑟和鸣--让同一项目在NetBeans和Eclipse平台下和谐相处,协同开发
2007-01-05 21:45 1553[quote="lighter"]有意思的 ... -
Re: 琴瑟和鸣--让同一项目在NetBeans和Eclipse平台下和谐相处,协同开发
2007-01-05 21:44 1452[quote="zzsczz"]有违法的可 ... -
Re: 琴瑟和鸣--让同一项目在NetBeans和Eclipse平台下和谐相处,协同开发
2007-01-05 21:44 1510[quote="zzsczz"]似乎... ... -
琴瑟和鸣--让同一项目在NetBeans和Eclipse平台下和谐相处,协同开发
2007-01-01 02:33 4072在Java IDE世界里,Eclipse和NetBeans是平 ... -
JBuilder 2007 企业版Trial提供下载
2006-12-24 23:46 7436越接近年关,Java IDE世界真是好戏连连,先是Sun在11 ... -
Sun 在圣诞节前送出的最后礼物-NetBeans 5.5多国语言版释出!
2006-12-20 23:03 2250JBuilder在Eclipse的穷追猛 ...
相关推荐
当使用Java调用外部程序时,可能会遇到程序无法正常退出的情况,通常这是由于进程的输入/输出流未被正确处理造成的。 - **解决方案1:** 关闭标准输入流 当外部程序等待标准输入时,如果没有关闭标准输入流,会...
Java中的输入输出流(I/O流)是Java程序与外部数据源交互的重要工具,它允许程序从设备(如键盘、磁盘、网络等)读取数据或将数据写入到这些设备。在Java中,I/O流被设计为一种抽象概念,以提供与设备无关的输入输出...
在Java编程中,数据输入输出流(DataInputStream和DataOutputStream)是用于处理基本数据类型和字符串的I/O操作的重要工具。这两个类提供了机器无关的读写功能,使得在不同平台之间交换数据变得更加简单。本文将详细...
### Java输入输出流与文件处理 #### 重要概念与基础知识 **输入输出流与文件处理**在编程领域占据着核心地位,特别是在Java中,通过`java.io`包提供了丰富的类和接口来支持输入输出操作。这包括从键盘读取用户输入...
在上面的代码中,我们使用 `Runtime` 类的 `getRuntime` 方法获取当前进程,然后使用 `exec` 方法执行一个外部命令,打开 cmd 命令行并启动 Msconfig.exe 程序。 总结 在 Java 中,我们可以使用 `Desktop` 类和 `...
此外,为了安全性和资源管理,避免内存泄漏,最好在调用外部程序后关闭相关流并监控进程状态。这可以通过`Process`对象的`waitFor()`方法实现,等待外部程序完成执行。 总的来说,Java提供了一定的灵活性来调用和...
java 调用 powershell 并传参 返回
在探讨Java调用带有JSON参数的WebService之前,我们首先需要了解几个关键的技术概念:Java、JSON以及WebService。 Java是一种广泛使用的编程语言,它具有面向对象、跨平台、多线程以及健壮性等特点。Java在企业级...
- 在Java代码中,实例化存根类,并通过其方法调用C++ Web服务提供的功能。 - 请求会通过HTTP或HTTPS协议发送,通常封装在SOAP消息中。 - C++服务端接收到请求后处理,然后返回响应,同样封装在SOAP消息中。 - ...
本篇文章将详细解释如何利用Java语言调用DOS命令来获取Windows系统的进程列表。这不仅适用于Java开发者,也对系统管理员有所帮助。 #### 一、基础知识介绍 在深入探讨具体的实现方法之前,我们首先需要了解一些...
### 浅谈Java输入输出流 #### 一、引言 Java作为一种广泛应用的编程语言,在处理数据时提供了非常强大且灵活的输入输出功能。然而,Java的输入输出操作可能看起来较为复杂,因为开发者通常需要处理多种不同的对象...
在这个“GMSSL的java调用(JNI库和调用实例).zip”压缩包中,我们主要探讨如何在Java环境中通过JNI(Java Native Interface)来调用GMSSL库,以便利用这些国密算法进行数据加解密和哈希运算。 首先,我们需要了解...
在Java编程中,有时我们需要在程序中调用Windows系统的命令行操作,例如执行外部程序、系统命令或者进行文件操作。Java提供了Runtime类和Process类来实现这一功能。以下是如何使用Java调用Windows命令行的详细步骤和...
Java调用SOAP(Simple Object Access Protocol)接口是Web服务交互中的常见操作,SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。本案例主要关注如何使用Java来实现SOAP请求并获取响应,具体我们...
至于 `web_controller` 这个文件,它可能是一个 Web 应用的控制器,用于接收 Web 请求并调用上述 Java 方法来执行 PowerShell 命令。在 Web 开发中,这种控制器通常处理 HTTP 请求,根据请求的类型(比如 POST 或 ...
在Java开发中,有时我们需要与外部服务进行交互,如发送短信、获取数据等,这时就会用到Web Service。本文将详细介绍如何使用HttpClient和XFire这两种不同的库来调用Web Service,特别是针对短信接口的调用。 首先...
在跨平台应用开发中,有时候我们需要在Java环境中调用C#实现的功能,这通常通过Web服务或者中间件来实现。本文将深入探讨如何在Java中调用C#接口,以及涉及的相关技术栈。 1. **Java与C#的互操作性** Java和C#虽然...
在Java和.NET平台上,我们可以使用内置的加密库实现DES加密和解密。本文将详细介绍如何在Java和.NET中实现互操作的DES加密解密,并提供两种不同的方法。 **方法一:使用标准库** 1. **Java实现**: - 引用`javax....
功能:获取java进程pid 进程可根据该pid调用exec自杀 注意事项:不能改变PidTool.java所在的包,否则需要重行生成dll。 编译命令中 "-PidTool.dll" 改为 "-FePidTool.dll",我整漏了! 使用方法: 1.javac PidTool...
在QT编程中,有时我们需要与外部应用程序进行交互,例如运行一个独立的可执行文件并将其输出集成到我们的...在实际开发中,你可能需要根据具体需求调整这些步骤,比如处理更复杂的输入/输出流,或者处理进程间的通信。