Java 桌面应用程序的 EXE 启动器
JAR 可执行文件的实用启动器,带有启动画面图像功能
引言
许多用户询问如何从 Java SE 项目制作 EXE 文件。 首先,我们必须说从 JAVA 源代码创建 EXE 构建文件是可能的,但它不符合目的,而且是一个非常糟糕的主意!
显而易见的是,虽然 JAR 是一个可执行文件,但对于更多用户(最终用户)来说,EXE 文件可能更方便。 因此,我们的想法是创建一个 EXE 引用文件,它可以运行“java -jar”命令,或者 Windows 使用的“javaw -jar”命令。 网上有更多文章解释如何创建具有相同作用域的 BAT 文件,此外,其他工具可以轻松地将 BAT -> EXE 转换。 现在,为什么不创建一个简单的 EXE 自动化文件来执行这些任务呢?
这是一个简单的工作,可用于中小型项目,这项工作希望成为为您定制的桌面解决方案创建个人 EXE 应用程序启动器的起点。
必备组件
- Java 运行时 Bin 目录必须在您的系统类路径中。
背景
在后台,我解释了某些方法的使用,例如strtok()
一个 tokenizer 函数
char* token = strtok(result, "\\.");
while (next != "exe") {
name = next;
token = strtok(NULL, "\\.");
next.assign(token);
}
这是一段源代码。 char* token 变量是 strtok()
存储 main string
片段的地方。
strtok(result, "\\.");
这将获得结果 string
的第一段,除以两个字符 "\
" 和 ".
" ; 那么为什么是 "\\.
" ? 因为 "\
" 会导致格式错误。 为什么这两个字符会在下一节中解释,但是结果字符串是 EXE 应用程序的简单路径,因此它会迭代每个片段,直到最后一个 "AppName.exe",它会丢弃 "EXE" 并仅保留应用程序的简单名称。
正如你所看到的,strtok()
函数有一个特殊的用途。 该函数的下一次迭代将是
strtok(NULL, "\\.");
直到 string
的末尾。
Using the Code
无论如何,一张图片胜过千言万语(即使这张图片是一段代码)。 :)
#include <iostream>
#include <fstream>
#include <windows.h>
using namespace std;
string getAppName() {
// Creates char array with maximum needed length
char result[MAX_PATH];
// Uses <windows.h> method to retrieve app name. Only Windows OS
std::string(result, GetModuleFileName(NULL, result, MAX_PATH));
char* token;
string name, next = "";
//Iterates until end of tokens of Name string, divided by char -> '\' and '.'
//The only '.' in Filename must be that for ".exe" , error otherwise.
token = strtok(result, "\\.");
while (next != "exe") {
name = next;
token = strtok(NULL, "\\.");
next.assign(token);
}
return name;
}
int main(int argc, char** argv) {
ifstream file; // file stream
string value = "";
string jar_name = "";
string image_name = "splash.gif";
file.open("run.ini");
if (!file) { // file does not exist, so use standard name
jar_name = getAppName();
jar_name += ".jar";
} else {
do {
file >> jar_name;
file >> image_name;
} while (!file.eof());
file.close();
}
//Launch JAVAW command on "jar_name" file with "image_name" splash image
string exec_command = "start javaw -splash:" + image_name + " -jar " + jar_name;
system(exec_command.c_str());
return 0;
}
应用程序以两种方式工作。 首先,它在同一文件夹中寻找名为“run.ini”的文件,找到后,它从文件中检索两个 string
值(jar_name, image_name
),它们由 RETURN
字符分隔(或者说每行一个 string
)。 它的工作是构建一个简单的 exec String
,就像这样
javaw -splas:image_name -jar jar_name
并调用 system(command) 来执行它,就像你在命令窗口中一样。
如果文件夹中不存在“run.ini”,则应用程序的第二种方式是通过默认参数检索(jar_name, image_name
),即 jar_name = ApplicationName.jar
(其中 ApplicationName
是 EXE 文件的名称)和 image_name = “splash.gif”
。 如前所述,这是一个自定义应用程序启动器的起点,该启动器能够读取自定义配置文件。
对于新手来说,启动画面图像是在应用程序加载时出现的加载图像。 从 JAVA 6 开始,“java
” 命令可以直接加载用于启动画面的图像。 因此,这个小应用程序的宝贵用途就是为我们的应用程序加载启动画面。
考虑因素
- 在源代码中,我们的执行命令前面带有 "start" 键。 这是避免显示控制台窗口的一种方法。
- EXE 意味着我们在 Windows 平台上(强烈暗示),所以这段代码仅在 Windows 上有效。 为什么? 因为
std::string(result, GetModuleFileName(NULL, result, MAX_PATH));
是在 Windows 中检索应用程序名称的方法。 例如,它可能不适用于 Linux。