我收到16位MS-DOS子系统错误,说“为应用程序设置环境时出错。选择'关闭'以终止应用程序。”当我试图运行一个应该下载程序的java applet时。
这是源代码:
if(getConfig(mainURL+configs).contains("1") || getConfig(mainURL+configs).contains("2") || getConfig(mainURL+configs).contains("3") || getConfig(mainURL+configs).contains("4")){
String fname = "\\"+getConfigArray(mainURL+filess).get(0);
String fpath = userdir.concat(fname);
final String locationDownload = getConfigArray(mainURL+urlss).get(0);
download(locationDownload, fpath);
final Runtime run = Runtime.getRuntime();
p.waitFor();
try {
run.exec(fpath);
} catch (final IOException e) {
}
}
我读到在添加p.waitFor()行时我可以摆脱这个; 但是我不知道在哪里添加它,因为当我尝试添加它时,编译时会出现“找不到符号”错误。
非常感谢任何帮助,感谢前进:)
答案 0 :(得分:1)
你的p变量究竟是什么?通常在Process对象上调用waitFor(),这可以从Runtime的exec(...)方法调用返回的对象中获取。
如果要调用waitFor()
,请在正确的对象Process对象上执行:
final Runtime run = Runtime.getRuntime();
// p.waitFor();
try {
String fpath = "";
Process p = run.exec(fpath);
int result = p.waitFor(); // **** add this here
// test result here. It should be 0 if the process terminates OK.
} catch (final IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
此外,您不希望忽略IOExceptions。至少输出堆栈跟踪。
最后,我不知道这是否能解决您的整体问题,但至少应该让您测试waitFor以查看它是否有帮助。了解此方法 阻止。
修改强>
你问:
但是使用run.exec我可以执行程序或特定浏览器,但不能使用URL吗?
这是正确的,因为你知道URL本身并不是“可执行”程序,事实上除非给予浏览器,否则毫无意义。您必须使用URL运行浏览器,但有一种方法可以使用Desktop对象(对于java 1.6和更高版本)。像这样的东西可以工作,如果你的平台支持桌面:
java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
if( !desktop.isSupported( java.awt.Desktop.Action.BROWSE ) ) {
// warn user that this is not going to work.
} else {
try {
java.net.URI uri = new java.net.URI(uriPath);
desktop.browse(uri);
} catch (IOException e ) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}