Redian新闻
>
请教一个问题,thanks!
avatar
请教一个问题,thanks!# Java - 爪哇娇娃
M*n
1
想在java里面调用一个外部可执行文件,这个外部程序本来是打印一个浮点数
到屏幕上,就是printf("%f", ans); 这样的,
我想在java程序里面capture这个值,我得code是这样的
Runtime rt = java.lang.Runtime.getRuntime();
process = rt.exec(command);

datastream = new DataInputStream(process.getInputStream());
result = datastream.readFloat();
可是总是死在 result = datastream.readFloat();这一行上,
请教大侠怎么解决?多谢!
另外,怎知道外部程序的输出确实读进来了呢? 一般用什么debug啊
我用jcreator,编辑还行,debug感觉比较弱。
avatar
e*g
2
printf("..\n"

【在 M*****n 的大作中提到】
: 想在java里面调用一个外部可执行文件,这个外部程序本来是打印一个浮点数
: 到屏幕上,就是printf("%f", ans); 这样的,
: 我想在java程序里面capture这个值,我得code是这样的
: Runtime rt = java.lang.Runtime.getRuntime();
: process = rt.exec(command);
:
: datastream = new DataInputStream(process.getInputStream());
: result = datastream.readFloat();
: 可是总是死在 result = datastream.readFloat();这一行上,
: 请教大侠怎么解决?多谢!

avatar
st
3
below should work. I think the output is string instead of float. I seem
to have said that before.
String temp=datastream.readLine();
float result=Float.valueOf(temp);

【在 e***g 的大作中提到】
: printf("..\n"
avatar
M*n
4
好像还是不行。debug执行到String temp = cs2result.readLine();
的时候就停了
是不是因为读output的时候那个process还没执行完毕的原因?
那个process是个大计算,怎么能让java等那个process terminate
以后在去读output呢?
process.waitFor(); 好像也不行啊
多谢!

【在 M*****n 的大作中提到】
: 想在java里面调用一个外部可执行文件,这个外部程序本来是打印一个浮点数
: 到屏幕上,就是printf("%f", ans); 这样的,
: 我想在java程序里面capture这个值,我得code是这样的
: Runtime rt = java.lang.Runtime.getRuntime();
: process = rt.exec(command);
:
: datastream = new DataInputStream(process.getInputStream());
: result = datastream.readFloat();
: 可是总是死在 result = datastream.readFloat();这一行上,
: 请教大侠怎么解决?多谢!

avatar
st
5
printf("%f\n",ans);

【在 M*****n 的大作中提到】
: 好像还是不行。debug执行到String temp = cs2result.readLine();
: 的时候就停了
: 是不是因为读output的时候那个process还没执行完毕的原因?
: 那个process是个大计算,怎么能让java等那个process terminate
: 以后在去读output呢?
: process.waitFor(); 好像也不行啊
: 多谢!

avatar
v*e
6
Different JVM has different behavior on this issue. The safe way would be to
use read() in InputStream API and check return value. Also try to let the
external program sleep for a few minutes before exit.

【在 M*****n 的大作中提到】
: 想在java里面调用一个外部可执行文件,这个外部程序本来是打印一个浮点数
: 到屏幕上,就是printf("%f", ans); 这样的,
: 我想在java程序里面capture这个值,我得code是这样的
: Runtime rt = java.lang.Runtime.getRuntime();
: process = rt.exec(command);
:
: datastream = new DataInputStream(process.getInputStream());
: result = datastream.readFloat();
: 可是总是死在 result = datastream.readFloat();这一行上,
: 请教大侠怎么解决?多谢!

avatar
m*t
7

I'm not sure I understand what you are trying to do. Are you trying to do
something after starting to exec the external program, and come back to read
the output only when it's done?

【在 M*****n 的大作中提到】
: 好像还是不行。debug执行到String temp = cs2result.readLine();
: 的时候就停了
: 是不是因为读output的时候那个process还没执行完毕的原因?
: 那个process是个大计算,怎么能让java等那个process terminate
: 以后在去读output呢?
: process.waitFor(); 好像也不行啊
: 多谢!

avatar
M*n
8
我把那个外部程序换成一个简单的 printf("%f\n", 3.14);
有没有事情了,stdout的输出可以被java得到,所以那个读stdout输出的
的code应该是对的。
我原来的计算程序格式是
prg < file
重定向输入一个文件。(这个程序不接受参数 prg file, 只能通过重定向)
如果我在java里面调用这个prg, 可以
直接写 command = new String("prg < file")么?
还是要用通过写process.getOutputStream()来 给prg 参数?
下面是我得code,不过好像还是不行啊:(
command = new String("prg");
Runtime rt = java.lang.Runtime.getRuntime();
process = rt.exec(command);

cs2input = new BufferedWriter(new OutputStreamWriter(process.getOutputSt
ream()));

【在 st 的大作中提到】
: printf("%f\n",ans);
avatar
M*n
9
对,就是java调用一个外部执行文件,然后程序里面读它的输出(那个程序
输出到stdout)

【在 m******t 的大作中提到】
:
: I'm not sure I understand what you are trying to do. Are you trying to do
: something after starting to exec the external program, and come back to read
: the output only when it's done?

avatar
t*s
10
不一定work,你还是重定向到一个文件,然后读那个文件比较管用。

【在 M*****n 的大作中提到】
: 对,就是java调用一个外部执行文件,然后程序里面读它的输出(那个程序
: 输出到stdout)

avatar
a*l
11
don't debug, just try to run to see if it works.
you might need to change your IDE.

【在 M*****n 的大作中提到】
: 对,就是java调用一个外部执行文件,然后程序里面读它的输出(那个程序
: 输出到stdout)

avatar
f*f
12
建议你用temp = cs2result.read()而不是readLine()试试。

【在 M*****n 的大作中提到】
: 我把那个外部程序换成一个简单的 printf("%f\n", 3.14);
: 有没有事情了,stdout的输出可以被java得到,所以那个读stdout输出的
: 的code应该是对的。
: 我原来的计算程序格式是
: prg < file
: 重定向输入一个文件。(这个程序不接受参数 prg file, 只能通过重定向)
: 如果我在java里面调用这个prg, 可以
: 直接写 command = new String("prg < file")么?
: 还是要用通过写process.getOutputStream()来 给prg 参数?
: 下面是我得code,不过好像还是不行啊:(

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。