我想为我的服务器开发一个 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
最佳答案
Runtime.exec()
返回一个 Process
,您应该从它的 stdout 输出中读取并写入它的 stdin(如果程序需要它)。
具体可以看这篇文章http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html部分为什么 Runtime.exec() 挂起。
顺便说一句。目前在 java 中执行进程的首选方法是使用 ProcessBuilder。关于java - 从 java 应用程序执行 Lynx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32912330/