0

「アプリケーションの環境をセットアップ中にエラーが発生しました。アプリケーションを終了するには、[閉じる] を選択してください。」という 16 ビット MS-DOS サブシステム エラーが発生します。プログラムをダウンロードするはずのJavaアプレットを実行しようとしているとき。

これはソースコードです:

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(); を追加すると、これを取り除くことができると読みました。しかし、追加しようとするとコンパイル時に「シンボルが見つかりません」というエラーが発生するため、どこに追加すればよいかわかりません。

どんな助けでも大歓迎です、よろしくお願いします:)

4

1 に答える 1

1

さて、あなたの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 を無視したくありません。少なくともスタックトレースを出力します。

最後に、これで問題全体が解決するかどうかはわかりませんが、少なくとも 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();
   }
}
于 2012-06-26T21:27:03.570 に答える