Java:“控制”外部应用程序

时间:2009-03-30 06:55:40

标签: java firefox

是否可以以编程方式从Java启动应用程序,然后向其发送命令并接收程序的输出?

我正在尝试实现这种情况:

我想访问一个使用大量javascript和特殊html + css功能的网站 - >网站未正确显示在swt.browser或任何其他可用的浏览器窗口小部件中。但是在Firefox中可以毫无问题地显示该网站。所以我想运行一个隐藏的firefox实例,加载网站并获取数据。 (如果FF可以嵌入到JFrame中,那将是很好的..)

有人知道如何实现这个目标吗? 真的很感激任何帮助!

编辑:该网站加载一些Javascript,它可以执行一些HTML魔术并加载一些图片。当我只从网站上阅读html时,我看到的只是一些JavaScript调用。但是当网站加载到浏览器中时,它会显示一些覆盖有文本的图像。这就是我试图向我的应用程序的用户显示的内容。

5 个答案:

答案 0 :(得分:1)

要从应用程序中启动Firefox,您可以使用:

Runtime runtime = Runtime.getRuntime();
try {
    String path = "/path/to/firefox";
    Process process = runtime.exec(path + " " + url);
} catch (IOException e) {
    // ...
}

要在进程启动后操作进程,可以经常使用 process.getInputStream() process.getOutputStream(),但这样做对你来说无济于事Firefox。

除了尝试在应用程序和浏览器实例之间直接交互之外,您应该研究解决特定问题的方法。考虑将整个界面移动到Java gui,或从头开始做一个Web应用程序 - 而不是一半和一半。

答案 1 :(得分:1)

请参阅此article - 它将教您如何启动进程,读取其输出并写入其输入流。

但是,此解决方案可能不是您的问题的最佳解决方案。您需要从网页获取什么样的数据?用HTTP GET读取html然后用Html解析器解析它会更好吗?

答案 2 :(得分:0)

如果你有一个可用的文本模式浏览器(比如linux上的links2),你可能想看看 可以呈现页面的程度。例如,命令“links -dump http://someurl.com”将页面格式化为文本并立即退出,从而导致输出可以使用Ray Myers和kgiannakakis建议的方法轻松解析。

答案 3 :(得分:0)

如果网站是静态的,您可以使用像Jericho这样的网络抓取工具来加载网址,解析HTML并在DOM中浏览您需要的信息。

答案 4 :(得分:0)

虽然将来a similar feature to what you describe is planned for FireFox,但尚未提供。该功能被称为TaskFox,并且来自链接的维基,“其目的是允许用户快速访问信息并执行通常需要几个步骤才能完成的任务。”

事实上,今天即将推出的TaskFox功能的消息刚刚破裂。也许你应该考虑一个职业是心灵而不是程序员。