java - JSmooth 生成的 exe 不显示闪屏

标签 java swing splash-screen jsmooth

我使用 Jsmooth 将 Java Swing 应用程序包装为 exe,但我看不出有什么办法可以利用 Java 6 启动屏幕选项。我有以下 list 文件:

     Manifest-Version: 1.0

     SplashScreen-Image: resources/LOADLOGO.png

     Main-Class: se.bookingapp.UI.MainFrame

如果我只需单击应用程序的 jar 文件,就会出现启动屏幕。但是,JSmooth 生成的 jar 文件的 exe 形式并不以某种方式显示启动屏幕。有谁知道为什么?

最佳答案

昨天我完成了 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,并将相对位置添加到应用程序参数部分中的应用程序,如下所示:

enter image description here

就是这样。我知道这不是最好的选择,但这是一种解决方法。

但是有一个小问题:

由于 ApplicationLoader.jar 调用 cmd.exe,因此包装的 .exe 和您的应用程序将在两个不同的进程中执行。

这意味着,如果您出于某种原因(意外崩溃或其他原因)必须终止 .exe 进程,您的 Java 应用程序仍将作为 java.exe 进程运行。因此,在这种情况下,您必须终止 MyApp.exejava.exe 进程。实际上,如果你只是杀死 java.exe 进程,那么 MyApp.exe 进程将自行完成执行。

如果您牢记这一点并且可以接受这一点,我认为这个选项非常简单且有用。 我希望这对任何寻求解决此问题的人有所帮助。

关于java - JSmooth 生成的 exe 不显示闪屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8114572/

相关文章:

java - JFrame 中的自动完成装饰器

iphone - 每次应用程序在 iphone 中启动时都想更改启动画面

.net - WinForms 中具有 alpha channel 透明度/不透明度的启动屏幕

java - Swing drawString : Text bounds and line wrapping

java - java中如何启动ThreadGroup?

java - 使用java在arff文件中定义属性

iphone - 在 iPhone 5 中启动画面消失后主屏幕看起来像变化?

Java Swing 拖放并弹出对话框

java - 等待来自 swing 组件的输入

java - 如何使这个 SwingWorker 代码可测试