import java io *public class CommandWrapper{Process processThread inThread outpublic CommandWrapper(Process process){this process = processfinal InputStream inputStream =process getInputStream()//final BufferedReaderr=new BufferedReader(new InputStreamReader(inputStream))final byte[] buffer = new byte[ ]out = new Thread(){//String lineint lineNumber= public void run(){try {while (true){int count = inputStream read(buffer)System out println(lineNumber+ : +new String(buffer count ))//line=r readLine()//System out println(lineNumber+ : +line)lineNumber++}}catch (Exception e){}}}final BufferedReader reader =new BufferedReader(new InputStreamReader(System in))final OutputStreamoutputStream = process getOutputStream()in = new Thread(){String linepublic void run(){try{while (true){outputStream write((reader readLine()+ \n ) getBytes())outputStream flush()}}catch (Exception e){}}}}public void startIn(){in start()}public void startOut(){out start()}public void interruptIn(){in interrupt()}public void interruptOut(){out interrupt()}public static void main(String[] args){try{CommandWrapper mand= new CommandWrapper(Runtime getRuntime() exec( native ascii ))mand startIn()mand startOut()}catch (Exception e){e printStackTrace()}}}我以native ascii为范例
程序和网友给我的那个程序做了对比 发现如下几个在处理这个问题时需要注意的地方 由于不知道目标程序的输入输出顺序 因此只能建立两个单独的线程分别处理输入和输出 这样输入和输出就不会阻塞了 但是有些目标程序要求有特定的输入输出顺序 而经过这个类封装的结果是在任何状态下都可以输入 程序的任何输出也会被马上反映出来 这是构造通用类的第一个问题 不能直接使用I/O重定向 在最开始的时候我是考虑直接使用I/O重定向的 但是实际的情况是Process的I/O的定义刚好和我的预想相反 我们从Process取得的InputStream实际上是它的输出 而取得的OutputStream是它的输入 这样就无法进行I/O重定向了 必须我们进行编码来读取程序的输出和写入控制台的输入 (这里的I/O重定向是指想将它的I/O直接重定向到系统的I/O) 写入控制台的输入 outputStream write((reader readLine()+ \n ) getBytes())outputStream flush()这里有两个问题值得注意 第一个是我们在控制台输入一行数据以后按下回车 那么语句reader readLine()可以正确的得到
你的输入 为什么要加那个换行符呢?这是在测试的时候发现的问题 在以native ascii作为例子的时候发现不加这个的话它不能得到控制台的输入 但是我在替那位网友解决的问题的时候他的程序则没有这个问题 因此猜想可能是因为有的程序要求读取的一整行的数据(例如native ascii) 而大部分的命令行程序在编码的时候读取的是整数这样的值或者其他类型的值 他们是以空格或者其他的字符分隔的 因此就不需要那个额外的换行符(例如那位网友的程序读取的是一元二次方程的三个系数) 另外一个问题就是flush方法的使用 在最开始的时候没有想到要这样刷新进去 无论是否加换行符外部程序都无法读取写入的输入 后来才想到要调用一下这个方法 这个也是在我们输出的时候应该注意的一个问题 有些需要马上反应出来的输出一般都在写入以后要调用它 否则输出/输入不能马上反应出来 对于程序的输出 最开始我是构造的一个BufferedReader想以行为单位输出 对于那位网友的程序 结果证明不是很好用 但是以native ascii作为例子运行又没有问题 这个估计和外部程序的代码也有关系 如果外部程序没有输出换行符可能使用BufferedReader就会有问题 但是通过直接读取输出就没有问题了 另外需要注意的就是 System out println(lineNumber+ : +new String(buffer count ))中严格来说应该是 System out println(lineNumber+ : +new String(buffer count))之所以减一是因为读取输入的时候人为的多加了一个换行符 如果这个地方不减一就会多输出一个空行 基于以上的种种原因 要构造一个执行外部程序的包装器类不太好办 特别是文章中提到的几个问题 有时间和兴趣的朋友可以做一下测试 看看以上的问题和猜测是否正确 另外附上一段源代码 是一个fortran的程序 implicit nonereal a b creal dreal root root print* 请输入一元二次方程的系数a b c: read(* *) a b cd=b** *a*cif(d>= ) thenroot =( b+sqrt(d))/( *a)root =( b sqrt(d))/( *a)print* root = root print* root = root elseprint* 一元二次方程没有实根! end ifpauseend lishixinzhi/Article/program/Java/JSP/201311/19704
Java程序写好了怎样在别人电脑上运行, java小程序如何在别人电脑上运行
第一 改文件关联 把jar关联给java.exe 具体百度 双击运行jar 有详细教程
第二 批处理 写一个批处理脚本 执行运行jar的命令
第三 用exe4j打包 exe4j可以把jar打包成一个exe文件 然后就可以在任何安装jre的电脑运行了。而且还提供把依赖库打包进exe的功能,是最理想的运行jar的方式。
java程序怎样转成能在别人电脑上运行的程序
运行环境是必须的,不过应该一般的系统上都有的运行环境。想直接运行就写个批处理了!
Qt5编写的程序怎样在别人电脑上运行
步骤如下:
1、新建一个Visual C++的“Win32项目”,建立一个空项目。
2、建立完成后,右键点击右边的“解决方案”中的“源文件”。
3、选择“添加”,然后添加“新建项”。
4、选择“Visual C++”中的C++文件,点“添加”。
5、在新加的C++文件里面写好代码
java 怎样在没安装JDK的电脑上运行JAVA程序
你的是.java文件吧,如果是就就得用JDK中的javac.exe编译,如果只是.class文件就不需要JDK了,只有要jre就可以了
怎么在电脑上运行java程序?
首先你要在你的电脑上安装jdk。你可以在后面链接地址下载适合你自己的版本(:oracle./techneork/java/javase/downloads/index.),如果这个链接过期了,请在:oracle./这个首先找一找。
在你的电脑上配置java环境变量,主要是配置path和classpath。你可以百度java环境变量配置,可以找到很多java环境变量配置方法。配置完毕,可以在cmd窗口下用java -version来查看是否配置成功。如果显示出java版本相关的信息表示配置成功,可以进行下一步了。
编译你的源代码,cmd窗口下把路径改变(cd)到你源代码文件所在的路径,然后用javac 源文件名编译,例如javac Hello.java(需要注意的是源文件名需要是你文件public类的类名,如果你的文件有public类的话)。当然你也可以不改变(cd)到源文件所在的路径,你的文件就需要加上绝对路径就可以了。例如:javac e:\src\Hello.java.
运行你编译好的文件,java Hello(需要注意运行的时候没有后缀.java或者.class),同样你可以不改变路径用绝对路径运行,例如:java e:\src\Hello.如果你的代码中有窗口这样的类似的图形化界面,你就需要用javaw来运行。
另外,你可以使用eclipse,NetBeans这样的集成开发环境(IDE)来写代码,这样方便很多。
装一个jdk
需要执行命令 java -jar xx.jar 可以运行打包的jar文件
javac xx.java 编译
java xx 运行
我编写的JAVA程序怎么弄到别人电脑上运行啊?
把你的文件目录结构理清了,然后把你所写的类和包全部打包成*.jar文件,复制到他的机子,只要他的jvm正常(包括正确配置了path),你的程序就可以运行。我试过了,从windows里面移到Linux都可以运行。
Qt程序在别人电脑上运行不了怎么办
缺失Qt程序运行所需的依赖库,应该提示少什么文件,在开发机上复制一份,放在根目录就成
public class Demo {
public static void main(String[] args) throws IOException {
String cmd = "notepad.exe"//要打开的外部程序路径
Runtime runtime = Runtime.getRuntime()
Process p = runtime.exec(cmd)
}
}
以上为核心代码,自己可以把路径从外部传入,再打成一个可执行文件。
评论列表(0条)