添加p.waitFor();

时间:2012-06-26 20:28:00

标签: java applet

我收到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()行时我可以摆脱这个; 但是我不知道在哪里添加它,因为当我尝试添加它时,编译时会出现“找不到符号”错误。

非常感谢任何帮助,感谢前进:)

1 个答案:

答案 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();
   }
}