0

Jsmooth を使用して Java Swing アプリケーションを exe としてラップしていますが、Java 6 スプラッシュ スクリーン オプションを利用する方法がわかりません。次のマニフェスト ファイルがあります。

     Manifest-Version: 1.0

     SplashScreen-Image: resources/LOADLOGO.png

     Main-Class: se.bookingapp.UI.MainFrame

アプリケーションの jar ファイルをクリックするだけで、スプラッシュ画面が表示されます。ただし、JSmooth で生成された jar ファイルの exe 形式では、何らかの理由でスプラッシュ画面が表示されません。誰かが理由を知っていますか?

4

2 に答える 2

2

昨日、Java アプリケーションの開発を終了しましたが、同じ問題がありました。.jar ファイルをダブルクリックするか、コマンド ラインのスプラッシュ画面で実行すると完全に機能しますが、ラップされたファイルを実行すると機能しません。JSmooth だけがこの機能をサポートしていないようです。

.exeただし、ラップされたスプラッシュ画面を同時に機能させるためにちょっとしたトリックを行いました。コマンド ラインApplicationLoader.jarで実行される単一のメイン クラスで構成される、という小さなアプリケーションを作成しました。java -jar "Application.jar"完全なコードは次のとおりです。

public class ApplicationLoader {
/**
 * @param args the command line arguments
 */
public static void main(String[] args) {        
    /* First I check if the first parameter is not null and it's not an empty string */
    if(args[0] != null && !args[0].trim().isEmpty()){
        /* Then I use java.util.regex package to validate the parameter is a .jar file */
        Pattern pattern = Pattern.compile(".*jar");
        Matcher matcher = pattern.matcher(args[0]);            
        if(matcher.matches()){
            /* Finally I define the command line like: java -jar "Application.jar" */
            String command = "java -jar \"" + args[0] + "\"";
            try {
                Runtime r = Runtime.getRuntime();
                ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", command);
                Process p = pb.start();
                p.waitFor();
                } catch (IOException | InterruptedException ex) {
                   JOptionPane.showMessageDialog(null, ex.getMessage(), "Error executing: "+command, JOptionPane.ERROR_MESSAGE);
                }                
        } else {
            JOptionPane.showMessageDialog(null, "The argument is not a .jar file!!");
        }            
    } else {
        JOptionPane.showMessageDialog(null, "There's not a valid argument!");
    }
}
}

アプリケーションのフォルダー構造は次のとおりです。

MyApp
  +-- bin
  |    +-- MyApp.jar
  |    +-- ApplicationLoader.jar
  +-- MyApp.exe

そのJSmootため、クラスパスを次のように変更し、アプリケーション引数セクションでアプリケーションApplicationLoader.jarに相対位置を追加しました。

ここに画像の説明を入力

以上です。これが最善の選択肢ではないことはわかっていますが、回避策です。

ただし、少し問題があります。

ApplicationLoader.jara を呼び出してからcmd.exeラップされ.exe、アプリケーションは 2 つの異なるプロセスで実行されます。

これは.exe、何らかの理由 (予期しないクラッシュなど) でプロセスを強制終了する必要がある場合、Java アプリケーションがまだjava.exeプロセスとして動作していることを意味します。その場合、強制終了して処理する必要がMyApp.exeありjava.exeます。実際、プロセスを強制終了するとjava.exeMyApp.exeプロセスは自動的に実行を終了します。

これを念頭に置いて、それを受け入れることができるなら、このオプションは非常にシンプルで便利だと思います. この問題の回避策を探している人にとって、これが役立つことを願っています。

于 2012-11-03T12:16:55.637 に答える
0

jarファイルを実行すると動きますか?たとえば、WinRar で開き、マニフェストが META-INF フォルダーにあり、LOADLOGO.png も正しいフォルダーにあるかどうかを確認します。

それをした後、それはうまくいくはずです。わたしにはできる。マニフェストに問題はありません。

于 2011-12-29T12:33:23.210 に答える