我使用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形式不会以某种方式显示启动画面。有谁知道为什么?
答案 0 :(得分: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
并在 Application Arguments 部分中为我的应用程序添加相对位置,如下所示:
就是这样。我知道这不是最好的选择,但它是一种解决方法。
但是有一点问题:
由于ApplicationLoader.jar
调用cmd.exe
,因此包装的.exe
和您的应用程序将在两个不同的进程中执行。
这意味着如果由于某种原因(意外崩溃或其他原因)必须终止.exe
进程,则您的Java应用程序仍然可以作为java.exe
进程运行。因此,在这种情况下,您必须终止MyApp.exe
和java.exe
进程。实际上,如果您只是杀死java.exe
进程,那么MyApp.exe
进程将自行完成执行。
如果你牢记这一点并且你可以忍受,我认为这个选项非常简单和有用。 我希望这对任何寻找这个问题的解决方法的人都有帮助。
答案 1 :(得分:0)
执行jar文件时是否有效?例如,使用WinRar打开它,检查清单是否在META-INF文件夹中,LOADLOGO.png也在右侧文件夹中。
完成后,它应该工作。这个对我有用。你的清单没有错。