我收到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()可以摆脱这种情况;
但是我不知道在哪里添加它,因为当我尝试添加它时,在编译时会出现“找不到符号”错误。
非常感谢您的帮助,在此先感谢:)
最佳答案
那么您的p变量到底是什么?通常,您在Process对象上调用waitFor(),这可以从运行时的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。至少输出stacktrace。
最后,我不知道这是否可以解决您的总体问题,但至少应允许您测试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();
}
}