Gluonfx kembiedlinkerror / use .dll в .jar при запуске нативного изображенияJAVA

Программисты JAVA общаются здесь
Anonymous
Gluonfx kembiedlinkerror / use .dll в .jar при запуске нативного изображения

Сообщение Anonymous »

Я получаю < /p>

Код: Выделить всё

[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB] Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:893)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at java.base@23/java.lang.Thread.runWith(Thread.java:1588)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at java.base@23/java.lang.Thread.run(Thread.java:1575)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:836)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:812)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB] Caused by: java.lang.UnsatisfiedLinkError: File /jni/win/x86_64/jd2xx.dll was not found inside JAR.
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at jd2xx.JD2XX.(JD2XX.java:760)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at org.example.App.start(App.java:19)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:839)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:483)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:456)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at java.base@23/java.security.AccessController.executePrivileged(AccessController.java:132)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at java.base@23/java.security.AccessController.doPrivileged(AccessController.java:400)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:455)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
[Sat Apr 05 15:47:01 CEST 2025][INFO] [SUB]     at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:185)
При запуске MVN Gluonfx: nativerun
Я следил за требованиями, задокументированными по адресу https://docs.gluonhq.com/#_maven_archetype & https://docs.gluonhq.com/#platforms_windows
Я использую командную строку x64 Native Tools (используя Windows 11 Pro) с целями ниже: < /p>

Код: Выделить всё

mvn gluonfx:run
mvn gluonfx:runagent
mvn gluonfx:build
mvn gluonfx:nativerun
Когда Jd2xx не включен в проект, я могу запустить все 4 гола. -> jd2xx.jar («Добавил файл jard-ought raste».

Код: Выделить всё

mvn install:install-file -Dfile=C:\java\jd2xx\jd2xx.jar -DgroupId=com.example -DartifactId=jd2xx -Dversion=1.0.0 -Dpackaging=jar -DlocalRepositoryPath=C:\xx\yy\.m2\repository
< /code>
Когда я включаю jd2xx в проект, я могу запустить только первые три цели и добиться исключения выше при запуске Gluonfx: nativerun gal < /p>
Это мой mre: < /p>
package org.example;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import jd2xx.JD2XX;

import java.io.IOException;

public class App extends Application {

@Override
public void start(Stage stage) throws IOException {

Label labelWithJD2XXInfo = new Label();

JD2XX chosenPort = new JD2XX();
chosenPort.open(0);
chosenPort.setBaudRate(250000);
chosenPort.setDataCharacteristics(JD2XX.BITS_8, JD2XX.STOP_BITS_2, JD2XX.PARITY_NONE);
chosenPort.setFlowControl(JD2XX.FLOW_NONE, 0, 0);
labelWithJD2XXInfo.setText(String.valueOf(chosenPort.getDeviceInfo()));

var scene = new Scene(new StackPane(labelWithJD2XXInfo), 800, 500);

stage.setScene(scene);
stage.show();

}

public static void main(String[] args) {
launch();
}

}
< /code>
Это мой pom.xml: < /p>

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
org.example
test
1.0-SNAPSHOT

UTF-8
21
21



com.example
jd2xx
1.0.0


org.openjfx
javafx-controls
24





com.gluonhq
gluonfx-maven-plugin
1.0.26

org.example.App



org.apache.maven.plugins
maven-compiler-plugin
3.8.0

21



org.openjfx
javafx-maven-plugin
0.0.8

org.example.App




< /code>

Это модуль info.java:
module org.example {
requires javafx.controls;
requires jd2xx;
exports org.example;
}
При запуске gluonfx: runagent Цель.

Код: Выделить всё

{
"pattern":"jd2xx:\\Qjni\/win\/x86_64\/jd2xx.dll\\E"
}
< /code>
jni-config.json также есть информация о JD2XX: < /p>
{
"type":"Ljd2xx.JD2XX$DeviceInfo;"
},
{
"type":"Ljd2xx.JD2XX$DeviceInfo;"
},
{
"type":"Ljd2xx.JD2XX;"
},
{
"type":"Ljd2xx.JD2XX;"
},
{
"type":"Ljd2xx.JD2XXEventListener;"
},
{
"type":"Ljd2xx.JD2XXEventListener;"
},
...
...
...
{
"type":"jd2xx.JD2XX",
"fields":[{"name":"event"},{"name":"handle"},{"name":"kill"},{"name":"listener"}]
},
{
"type":"jd2xx.JD2XX",
"fields":[{"name":"event"},{"name":"handle"},{"name":"kill"},{"name":"listener"}]
},
{
"type":"jd2xx.JD2XX$DeviceInfo",
"fields":[{"name":"description"},{"name":"id"},{"name":"serial"},{"name":"type"}]
},
{
"type":"jd2xx.JD2XX$DeviceInfo",
"fields":[{"name":"description"},{"name":"id"},{"name":"serial"},{"name":"type"}]
}
< /code>
[b] Не уверен, что это актуально, но: < /strong> < /p>
jd2xx.jar содержит .dll (jd2xx.dll), который нуждается в 3 других файлах. ../windows/system32
 обновлено 8/4/2025 [/b] 
Как вы правильно знаете, «file /jni/win/x86_64/jd2xx.dll не был найден внутри Jark».  LoadLibrararyFromJar) Когда он пытается загрузить .dll, который находится в.      if (!var5.exists()) {
throw new FileNotFoundException("File " + var5.getAbsolutePath() + " does not exist.");
} else {
byte[] var6 = new byte[1024];
InputStream var8 = NativeUtils.class.getResourceAsStream(var0);
if (var8 == null) {
throw new FileNotFoundException("File " + var0 + " was not found inside JAR.");
}
Я понятия не имею, как Gluonfx обрабатывает.>

Подробнее здесь: https://stackoverflow.com/questions/795 ... tive-image

Вернуться в «JAVA»