我正在尝试创建一个独立的运行时映像,如本答案中所述。当我尝试从 gradle 的“Badass JLink”插件运行 JLink 任务时,出现以下错误:
Execution failed for task ':prepareMergedJarsDir'. > java.io.IOException: Cannot run program "C:\Program" (in directory "C:\Users\erik\AppData\Local\Temp\badass-2371206120064261418"): CreateProcess error=2, The system cannot find the file specified
Run Code Online (Sandbox Code Playgroud)
我似乎无法在插件文档中找到有关此类错误的任何文档。
我的build.grade文件如下:
plugins {
id 'java'
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.8'
id 'org.beryx.jlink' version '2.14.0'
}
group 'CAM'
version '0.2'
sourceCompatibility = 11
repositories {
mavenCentral()
}
javafx {
version = "12.0.2"
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
dependencies {
testCompile group: 'junit', name: 'junit', version: …Run Code Online (Sandbox Code Playgroud) 我已经使用内置的 Gradle 支持在 IntelliJ (2019.2) 中设置了一个 OpenJDK 12 项目。为了设计 GUI,我使用的是 JavaFX 12。我已经多次遵循并阅读了安装指南,在我的 IDE 中运行程序没有问题,问题是当我尝试构建我运行的分发的 .jar 文件时成问题。到目前为止,我还没有找到一个有效的解决方案,我已经搜索了很多,几乎为此而撕裂了我的头发。目前,当我尝试使用 java -jar "jarName".jar 运行我的 jar 文件时,出现以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: javafx/application/Application
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at com.CAM.Starter.main(Starter.java:6)
Caused by: java.lang.ClassNotFoundException: javafx.application.Application
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 10 more
Run Code Online (Sandbox Code Playgroud)
我尝试将我的主类移动到一个不扩展应用程序的单独类,这就是导致上述错误的原因。不移动我的 Main 类,我会得到一个不同的错误。
我的 build.gradle 目前看起来像这样:
plugins {
id 'java'
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.8' …Run Code Online (Sandbox Code Playgroud) 所以我有一个变量,我们称之为'ID'.我需要相对于固定数量的值检查此值.当然,ID只能匹配其中一个值,因此不会出现停止第一个匹配值的问题,因为其他值都不匹配.变量也有可能与任何给定值都不匹配.那么我的问题是,资源效率最高的方法是什么?我可以想到解决这个问题的两种简单方法.由于我知道编程时的值,我可以使用'或'设置条件,只检查每个值,如下所示:
if (ID == "1" or ID == "16" or ID == "58") then
--do something--
end
Run Code Online (Sandbox Code Playgroud)
这样做的问题在于它写起来非常冗长乏味.另一个选项涉及foreach循环,我预先定义一个表.
values = {"1", "16", "58"}
for _, value in ipairs(values) do
if(ID == value) then
return true
end
end
Run Code Online (Sandbox Code Playgroud)
这样做的好处是它可以重复使用,因为我需要使用不同的值集进行至少10次精确检查,缺点是我怀疑需要更多资源.
任何帮助将不胜感激.
我有以下方法:
public static Date convertFromWowInterface(String wowinterfaceFormat){
Date date = null;
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yy hh:mm a");
date = dateFormat.parse(wowinterfaceFormat);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
Run Code Online (Sandbox Code Playgroud)
传递的字符串格式为:
"08-11-19 07:00 AM"
Run Code Online (Sandbox Code Playgroud)
显然没有引号。现在,上述方法在我的Mac上可以正常工作,但是当我的某些用户使用该程序(在Windows上)时,他们会收到异常:
java.text.ParseException: Unparseable date: "08-11-19 07:00 AM"
at java.base/java.text.DateFormat.parse(DateFormat.java:395)
Run Code Online (Sandbox Code Playgroud)
操作系统是否在这里有所作为?还是还有其他东西在玩?据我所知,SimpleDateFormat与输入字符串完全匹配?