web-dev-qa-db-ja.com

メソッドの呼び出しエラー、jvmの起動に失敗しました

私はjavafx v8.0.40を使用してデスクトップアプリケーションを開発しています。私はinno 5でexeファイルを作成しました。自分のコンピューターでexeファイルを実行すると、問題なくインストールされて実行されます。一方、他のコンピューターにインストールして実行しようとすると、インストールの最後に、「ダイアログを呼び出すエラー」というウィンドウダイアログがポップアップ表示され、[OK]をクリックします。 「jvmの起動に失敗しました」という別のウィンドウがポップアップします。私はインターネット全体を検索しましたが、このトピックについてはあまり見つけることができませんでした。私はこの問題の解決策を得ることを望んでいます。前もって感謝します。

14
tarlan

私も同じ問題に遭遇しました。以下は私のために働き、私が爆発した「エラー呼び出しメソッド」を理解するのに役立ちました。および「JVMの起動に失敗しました」ダイアログ:

  1. _.jar_ファイルを見つけます
    • プロジェクトと同じ名前で、アプリケーションのインストールディレクトリの_AppData\Local\{ApplicationTitle}\app_(shortcut:type%appdata%into Explorer);にあります。プロジェクトの名前がHelloWorldの場合、_HelloWorld.jar_が見つかります
  2. コマンドプロンプトでディレクトリに移動します
    • shift+Right Click エクスプローラーウィンドウの空白部分を開き、[ここでコマンドウィンドウを開く]を選択します(これは最近学んだ手の込んだトリックです または、cd と同じですコマンドプロンプトを使用してディレクトリ)
  3. コマンドラインから_.jar_を実行します
    • _Java -jar "HelloWorld.jar"_と入力してヒット Enter

Tadah!あなたの隠された例外を見逃さないでください(「エラー呼び出しメソッド」の存在なので、漠然とあなたに伝えようとします)。 *

あなたの問題が mine に類似している場合、それはプロジェクトのoutフォルダーとインストールディレクトリの間のファイル構造の違いに起因します。そのため、プログラムはエディターで問題なくコンパイルされ、正しくビルドされます。結構です。構築するまで問題はなく、ファイル構造も少し異なります。

*コマンドラインから実行しても何も得られなかった場合は、そのinitialize()メソッドの実行中に発生している可能性のあるエラーを探します。それはあなたの問題がありそうなところです。 同様の問題、ここに示すようなポップアップ例外ダイアログを使用して、実行時に例外を公開できます。

12
Brad Turek

これはおそらく、出力jarに依存関係がないためです。したがって、アーティファクトにライブラリを追加する必要があります。そうすると、.exeの生成に問題はありません。

これはIntellijの例で、ライブラリは「利用可能な要素」からアーティファクトに手動で移動されています

Intellijの例

5
Rumoch

この質問は少し古いですが、今日私はまったく同じ問題に直面し、これら以外のエラーメッセージを検索する解決策を見つけることができませんでした。

問題はほぼ同じです:Java 8を使用してJavaFXアプリケーションをビルドし(dev pcで正常に実行)、Inno 5を使用してネイティブインストーラー(exe)にパッケージ化しました)アプリケーションは一部のマシンで正常に実行されました-他のものではエラ​​ーメッセージに正確にそれらで失敗しました:

  • 「メソッドの呼び出しエラー」とOKをクリックした後
  • 「jvmの起動に失敗しました」。

アプリケーションの起動時に、fxmlローダーは最初のビューコントローラーを読み込み、その「初期化」メソッドを呼び出します。初期化内で、処理されない例外がスローされている場合、アプリケーションがクラッシュし、これらの2つのウィンドウエラーメッセージが表示されます。

これが私のように苦労している人にも役立つことを願っています。

3
J.Dürr

J.Dürrによる応答(16年6月8日9:58に回答)は、私のメソッドの呼び出しエラーJVMを起動できませんでしたの問題の解決に役立ちました。次のコードを使用して問題を追跡しましたが、これは誤ったFXMLリソースパスであることが判明しました。

public static void main(final String[] taArgs)
{
  try
  {
    Main.launch(taArgs);
  }
  catch (Exception e)
  {
    JOptionPane.showMessageDialog(null, e.getMessage());
    try
    {
      PrintWriter pw = new PrintWriter(new File("<somefilename.txt>"));
      e.printStackTrace(pw);
      pw.close();
    }
    catch (IOException e1)
    {
      e1.printStackTrace();
    }
  }
}
1
Eddie Fann

私はこの問題を抱えていて、@ Brad Turekの答えは私を正しい方向に向けました。例外をスローしたのは私のコードではなかったことを除いて。

アプリケーションの起動に.exeラッパーが使用した.cfgファイル(/<app_name>/app/<app_name>.cfg)は、/libディレクトリに存在しないlibs(jarファイル)を誤って指しています。これにより(私は結論しました)、クラスローダーが起動をスローして終了しました。

.cfgファイルを修正した後、すべてが正常に機能しました。

0
svarog

私は問題を修正できませんでしたが、回避策を見つけました。メモ帳を使用して、アプリを起動するためのバッチファイルを作成しました。最初にcdを使用して.jarファイルのディレクトリに移動し、次にJava -jarを使用してアプリを起動しました。次のようになります。

cd C:\[wherever your project folder is located]\[name of project]\dist
Java -jar [name of project].jar

デスクトップに.batファイルとして保存し、バッチファイルを起動すると、プログラムが起動します。

0
Bold Warrior

ビルドにサードパーティライブラリを含めなかった場合、このエラーが発生する可能性があります。

以下は、プロジェクトの終了タグの直前のbuild.xmlに配置できます。

<target name="-post-jfx-deploy">
    <fx:deploy width="${javafx.run.width}" height="${javafx.run.height}" nativeBundles="all"
               outdir="${basedir}/${dist.dir}" outfile="${application.title}">
        <fx:application name="${application.title}" mainClass="${javafx.main.class}"/>
        <fx:resources>
            <fx:fileset dir="${basedir}/${dist.dir}" includes="*.jar"/>       
            <fx:fileset dir="${basedir}/${dist.dir}" includes="lib/*.jar"/>
        </fx:resources>
        <fx:info title="${application.title}" vendor="${application.vendor}"/>
    </fx:deploy>           
0
Yaw