- 浏览: 253598 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 IDE Console通过采用Runtime.getRuntime.exec()执行外部程序后,将返回一个Process对象. Process对象能返回三个流:
getInputStream(),对应Process程序的标准输出流。
getErrorStream(), 对应Process程序的标准错误输出流。
getOutputStream();对应Process程序的标准输入流。
函数名之所以与Process程序的方向相反,原因是站在Java Host程序的角度讲的。
现在我们应用此原理来仿真IDE 执行外部程序的过程。
列表1:ConsoleSimulator.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
/**
* Class for console simulation
*
* @author lewhwa
*/
public class ConsoleSimulator implements Runnable {
private volatile boolean isStop = false ;
private static final int INFO = 0 ;
private static final int ERROR = 1 ;
private InputStream is;
private int type;
/** Creates a new instance of StreamInterceptor */
public ConsoleSimulator(InputStream is, int type) {
this .is = is;
this .type = type;
}
public void run() {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr);
String s;
try {
while (( ! isStop) && (s = reader.readLine()) != null ) {
if (s.length() != 0 ) {
if (type == INFO) {
System.out.println( " INFO> " + s);
} else {
System.err.println( " ERROR> " + s);
}
try {
Thread.sleep( 10 );
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
public void stop() {
isStop = true ;
}
public static void main(String[] args) throws IOException,
InterruptedException {
// Process child = Runtime.getRuntime().exec("run.bat");
Process child = Runtime.getRuntime().exec( " java -classpath bin helloworld.Test " );
OutputStream os = child.getOutputStream();
InputStream stdin = child.getInputStream(); //
InputStream stderr = child.getErrorStream();
Thread tIn = new Thread( new ConsoleSimulator(stdin, INFO));
Thread tErr = new Thread( new ConsoleSimulator(stderr, ERROR));
tIn.start();
tErr.start();
int result = child.waitFor();
tIn.join();
tErr.join();
if (result == 0 ) {
System.out.println( " SUCCESS! " );
} else {
System.out.println( " FAILED! " );
}
}
}
外部Bat文件:
列表2
cmd.exe / C / Q copy
javac
cmd.exe / C tree
rem c:\Designer_v5. 1 .0_win32_x86.exe c:\Designer_v5. 1 .0_win32_x861.exe
time / t
测试Java类Test.java
列表3:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
/**Test Class
* @author lewhwa
*
*/
public class Test {
public static void main(String[] args) throws IOException {
FileReader fir = new FileReader("src/helloworld/Test1.java");
BufferedReader br = new BufferedReader(fir);
String s;
while((s=br.readLine())!=null){
System.out.println(s);
}
fir.close();
}
}
当ConsoleSimulator程序执行外部的run.bat时,输出如图1所示:
图1
当ConsoleSimulator程序执行外部的java test正常时,输出如图2所示:
图2
当ConsoleSimulator程序执行外部的java test发生异常时,输出如图3所示:
图3
综上,虽然没有在自己的GUI里将stdout和stderr进行说明,只是用ERROR>提示符和INFO>提示符进行演示,但是完全IDE Console的原理。对ConsoleSimulator稍加修改,完全放入到自己的应用程序当中去。
在我们进行Java程序开发的过程当中,可能涉及到其它的应用程序,借助这种技术,可以很好利用它们,将它们集成到自己的应用当中,将极大地缩短开发周期,何乐而不为呢!
评论
发表评论
-
CASE工具网址
2010-11-06 22:27 969各种软件辅助设计工具层出不穷,下面有一个相对完整的UML工具列 ... -
Java Mail API
2009-01-29 00:36 1480Today,I meets a problem on java ... -
NetBeans 7.0 ML使用印象
2008-12-21 19:23 3786看到新闻《NetBeans7.0M1 发布》htt ... -
Nimbus Look and Feel
2008-11-29 21:14 2208imbus Look and Feel When the ve ... -
NetBeans 6.0 最终版发布并提供下载
2007-12-03 20:16 1839经过Beta1,Beta2和RC1和RC2之后,NetBean ... -
NetBeans 6.0 Beta2释出
2007-10-24 22:36 3530NetBeans 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 10263随着Eclipse 3.3(Europa)的发布,NetBea ... -
Swing应用程序框架(Swing Application Framework)API绪论(JSR-296)之二(翻译)
2007-05-20 21:52 2737用 @Action 标注定义动作 @Action标注打算作为A ... -
Swing应用程序框架(Swing Application Framework)API绪论(JSR-296)之一(翻译)
2007-05-20 21:50 3078概述 本文档是原型Swing应用程序框架的简介,目标读者是那些 ... -
NetBeans Mangazine 第三期发布
2007-05-10 23:42 1491NetBeans Mangazine– 第三期 –2007 ... -
Swing应用程序框架(Swing Application Framework)项目简介
2007-05-07 02:53 5426原来采用Java开发GUI桌面应用程序时自己 ... -
NetBeans 在Redhat Enterprise Linux 5.0 64位版本上的安装
2007-05-07 02:51 3230由于项目的需求,需要在Redhat Enterprise Li ... -
Java调用外部进程并拦截输入输出流--Java IDE Console解密(上篇)
2007-01-14 23:17 4377几乎所有的Java 集成开发环境都需要调用外部进程进行Jav ... -
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 7400越接近年关,Java IDE世界真是好戏连连,先是Sun在11 ... -
Sun 在圣诞节前送出的最后礼物-NetBeans 5.5多国语言版释出!
2006-12-20 23:03 2212JBuilder在Eclipse的穷追猛 ...
相关推荐
Java调用Win32获取窗口句柄JNative-1.3.2 Java调用Win32获取窗口句柄JNative-1.3.2
java调用matlab程序的一个applet-java调用matlab.txt 最近在做java实现多Agent,如有同志可相互切磋,现附上一段java调用matlab程序的程序,希望能帮到有需要的同仁。
java中调用kettle中的job与转换源码,其中kettle用的是5.2.0.0的版本。已经测试过可以调用访问,并且可以传入参数调用。有需要的可直接拿去使用。
java调用Linux命令获取输出流,用于解决获取不到输出流的方法
JAVA调用外部程序 用JAVA调用外部程序并截出程序运行结果
在linux下,java调用c语言编译的*.so动态链接库的小例子.是一个简单计算器的例子.在java中传操作数和操作符,由C来计算,把结果传过来给java.
java 调用 powershell 并传参 返回
java调用ocx控件,jacob,jar和dll文件
通过java应用程序动态调用外部jar文件。
gitlab-api-java 调用测试,有1.接口分析;2.获取用户的private token;3.获取项目的projectId;4 获取仓库文件内容;等
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调用chatGpt的demo,流式读取
参照webcam-capture开源项目,我实际写了个java调用摄像头拍照的例子 在以下环境中测试通过: java 1.8 Windows7 64
上期CTP接口Java封装 可以使用该封装进行期货交易,并且可以搭建自己的程序化交易平台
对向前兼容性的推荐 :如果想要动态地创造Transformation (例如:从元数据),使用XML文件方法(KTR)而不是使用API。 XML文件兼容Kettle所有版本,同样对job有效的。 下面的例子进行以下操作: 1创建Transformation ...
java中两种方式调用其他.exe可执行程序
F:\Work\Study\功能点技术\java调用可执行文件\Java调用外部程序命令.doc
使用Java语言调用终端开启关闭Nginx服务器,然后执行ffmpeg命令,开启转流推流。以及其它指令,来学习吧
java通过url调用外部接口,返回字符串,再讲字符串解析成json格式。包含源码和jar包,直接运行即可,带注释。
MAC下java调用opencv-java的独立静态库文件 包含 opencv_454.jar libopencv_java454.dylib