#include<iostream>
#include<string>
using namespace std;
void main(){
cout<<"hello world"<<endl;
string i;
cin>>i;
cout<<i;
}
Codebyfair_jm20120305 如有错误请见谅 欢迎讨论^_^
以上是试验目标的C++程序
以下是试验用的java程序:
import java.io.*;
public class TestDemo
{
Process pc;
Runtime rt;
public TestDemo() throws Exception{
rt=Runtime.getRuntime();
String [] ss={"E:\\work\\Demo\\src\\Test.exe"};
pc=rt.exec(ss);
//readIt(); 注意这样也会产生堵塞
writeIt();
}
public static void main(String args[]) throws Exception{
new TestDemo();
}
public void writeIt(){
OutputStream fos=pc.getOutputStream();
PrintStream ps=new PrintStream(fos);
ps.print("another\n");
ps.flush(); //不加这个 后面的read就读不下去了
readIt();
}
public void readIt(){
InputStream ios=pc.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(ios));
String s;
try{
while((s=br.readLine())!=null){
System.out.println(s);
}
br.close();
ios.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
以上的做法 如果ReadIt()先写 则又会产生堵塞 所以最好用线程解决之。
堵塞的产生:
你先读取输入流(相当于被调用程序的输出流getInputStream)的话 如果遇到输入的地方(cin)则输入流堵塞,等待输入(如果不用线程的话就一直堵在那,根本无法通过输出流(相当于被调用程序的输入流)无法输入信息到进程里面去)。
如果你先用输出流输入到被调用程序里面去,但遗忘了用flush(),则数据根本就无法传输。
以下是线程的解决方法:
package aa;
import java.io.*;
public class TestDemo
{
Process pc;
Runtime rt;
public TestDemo() throws Exception{
rt=Runtime.getRuntime();
String [] ss={"E:\\work\\Demo\\src\\Test.exe"};
pc=rt.exec(ss);
new Thread(new Input()).start();
Thread.sleep(500);
new Thread(new Output()).start();
}
public static void main(String args[]) throws Exception{
new TestDemo();
}
class Output implements Runnable
{
public void run(){
OutputStream fos=pc.getOutputStream();
PrintStream ps=new PrintStream(fos);
ps.print("another\n");
System.out.println("已经输出");
ps.flush();
}
}
class Input implements Runnable
{
public void run(){
InputStream ios=pc.getInputStream();
BufferedReader brd=new BufferedReader(new InputStreamReader(ios));
String s;
try{
while((s=brd.readLine())!=null){
System.out.println(s);
}
}catch(Exception e){
}
pc.destroy();
}
}
}
分享到:
相关推荐
对Demo的使用介绍在官方文档的后面才开始介绍,这里建议应用跑起来之后,先自己试试手(可看后面介绍Demo如何使用的章节),看看如何跑一个流程、整个流程是怎么流的、并随时关注数据库表里的数据的变化等,对以后的...
主要内容有C#开发环境的使用、C#语言基础应用、字符串处理技术、数组和集合...使用、DataGridView数据控件、自定义用户控件、文件基本操作、文件夹基本操作、文件流操作、加密、解密及解压缩文件、C#与Word互操作、高效...
2.4.1 正确的命名标识符 20 2.4.2 提倡的命名习惯 21 2.5 小结 21 第3章 表达式——描述行为的元素 22 3.1 不简单的算术运算符 22 3.1.1 “+”运算符 22 3.1.2 “-”运算符 24 3.1.3 “*”运算符 ...
通过我们已经学过的知识,你可以编写一个最简单的程序输出一个也许是程序世界中最有名的词语: echo "Hello World!"; ?> First PHP page // Single line C++ style comment /* printing the message */ ...
惯例是把输入端口指 定为 in模式,把输出端口指定为out模式,把双向端口指定为 inout模式。这一良好的设计习惯, 从端口的名称和端口模式就可以一目了然地判定信号的用途、性质、来源和去向,十分方便。对 于一个...
从服务器中获取输入流,并同时与客户端建立输出流(服务器与客户端链接通过Socket进行连接) 3。当点击“保存”或“打开”时,开始传输数据。如果点击“取消”,关闭所有的流。 这里要注意的是,但是实际发现Socket...
关於 Process 处理的指令...............................................................................................16 六. 关於字串处理的指令...........................................................
To use Action, subclass and overwrite the process() method. The ActionServlet (Command) passes the parameterized classes to ActionForm using the perform() method. Again, no more dreadful request....
process n. 程序, 进程 ['prɒses] protected (关键字) 受保护的,私有的 [prә'tektid] provide v.规定(供应,准备,预防)[prә'vaid] refer to v.引用 [ri'fә:][tu:] reference n. 参考(引用,涉及)['refәrәns]' ...
”操作符 22 <br>2.4 表达式与关键词 22 <br>0045 正确使用“&&”和“||” 22 <br>0046 如何处理程序“溢出”错误 23 <br>0047 有效使用base关键字 23 <br>0048 typeof表达式的使用 23...
EndPoint 提供对 USB 端点描述符的访问、在给定设备配置中构造设备数据输入或者输出 HostFactory 包含 bootstrapping 方法 Hub 提供对 USB hub 描述符以及一些 hub 操作的访问 Interface 描述一组端点,并与一个特定...
只有在使用故障恢复控制台时,才能使用 fixboot 命令。 fixboot [drive] 参数 驱动器 将要写入引导扇区的驱动器。它将替代默认的驱动器(即用户登录的系统分区)。例如,驱动器:D: 范例 下列命令...