-1

我想为我的服务器开发一个 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

4

2 回答 2

0

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

有关详细信息,您可以查看这篇文章http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html部分为什么 Runtime.exec() 挂起

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

于 2015-10-02T17:24:27.110 回答
0

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

于 2015-10-02T17:29:08.970 回答