从Java应用程序执行Lynx

时间:2015-10-02 17:08:02

标签: java linux runtime lynx

我想为我的服务器开发一个java应用程序,但我需要对网站API(Twitch)进行身份验证。为此,我需要通过网页连接到一个帐户,所以我想使用Lynx这样做。但是,当我尝试从我的java应用程序启动Lynx时,程序会挂起,并且什么都不做:

Runtime rt = Runtime.getRuntime();

        try{

            if (os.contains("win")) {

                // this doesn't support showing urls in the form of "page.html#nameLink"
                rt.exec( "rundll32 url.dll,FileProtocolHandler " + url);

            } else if (os.contains("mac")) {

                rt.exec( "open " + url);

            } else if (os.contains("nix") || os.contains("nux")) {

                // Build a command string which looks like "browser1 "url" || browser2 "url" ||..."
                StringBuffer cmd = new StringBuffer();
                    cmd.append( "lynx" + " \"" + url + "\" ");
                rt.exec(new String[] { "sh", "-c", cmd.toString() });

            } else {
                return;
            }
        }catch (Exception e){
            return;
        }

显然这是因为Runtime.getRuntime()。exec()在某些条件下可能无法正常工作,但我找不到任何与Lynx相关的工作。

服务器操作系统:Ubuntu服务器14.10

2 个答案:

答案 0 :(得分:0)

Runtime.exec()返回Process,您应该从它的stdout输出中读取并写入它的stdin(如果程序需要它)。

有关详细信息,请参阅本文http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html部分为什么Runtime.exec()挂起

顺便说一句。现在在java中执行进程的首选方法是使用ProcessBuilder

答案 1 :(得分:0)

您是否可以使用java.net.URLConnection发出请求而不是启动外部进程?这可能更简单,而且肯定会更便携。