我是 java 的新手,也是 cygwin 的新手。我没有详细了解两者。
我需要一些帮助..
我将简单地尝试解释我的问题。
1)我正在研究tinyOS。它的开源操作系统,用于无线传感器网络。它提供了java库来处理通信(PC到传感器)
2)我正在通过cigwin在windows xp环境中工作。
3)我正在开发一个应用程序。这个应用程序需要一个名为“Serial Forwarder”的Java接口,它在提供的库中很容易获得。以前我曾经手动启动这个界面(输入命令**“java net.tinyos.sf.SerialForwarder”)**然后我的应用程序使用这个界面。但现在我想让我的应用程序独立。用户需要了解这个背景cygwin命令。
4)所以在我使用的java应用程序中
“ Runtime.getRuntime()。exec(”java net.tinyos.sf.SerialForwarder)“。
5)这我既没有给出任何错误也没有启动界面。
我是否正确行事? 当我使用运行时执行命令时,如何确保通过cigwin接口调用此命令?
另外..如果我想写.bat文件..我可以给出将要执行的命令..我怎么能确保这些命令是通过cigwin给出的..而不是通过cmd.exe .. 请帮忙 。我。
答案 0 :(得分:0)
很抱歉,但是有个坏消息......与Cygwin的TinyOS真的非常糟糕。即使你确实让事情发生了,它也会非常缓慢和不可靠(除非Cygwin或TinyOS自上次使用以来变得更好)。如果您需要在Windows上开发TinyOS,我强烈建议您下载UbunTOS + VirtualBox。
那就是说,我会尽力帮助你...希望改进你的Java,Cygwin和UNIX知识......
1。)得到。
2.)还有问题
3.)
您可以编写一个Java程序,它使用JAR中提供的类来执行您希望它执行的任何操作。如果您愿意,可以使用launch4j或其他一些包装程序将程序包装为可执行文件。虽然这确实没有必要。如果愿意,您还可以创建一个调用JAR的shell脚本。
4。)
疑难杂症。是的,调用另一个可执行文件并通过PIPE进行通信也是可能的,尽管加载类并直接与它进行通信可能会更快。
5。)
它可能没有做任何事情,因为你没有给它任何命令行参数,它返回的Process对象有方法getInputStream()和getOutputStream(),允许你与进程通信。 ..该过程不会写入标准输出...它将写入管道。如果你想看看进程写的是什么,那么你需要读取getInputStream()返回的流。
6。)
如果您使用的是Cygwin,请不要使用批处理文件,而是使用BASH shell脚本(不需要扩展名,但有时会出现“.sh”文件扩展名。)
答案 1 :(得分:0)
我可能会误解或过度简化,但您只是想从Java中运行Java程序?为什么不呢:net.tinyos.sf.SerialForwarder.main(new String[] {"foo", "bar"});
你已经使用Java了,只需调用类的main()
方法!