我想为我的服务器开发一个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
答案 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发出请求而不是启动外部进程?这可能更简单,而且肯定会更便携。