У меня есть приложение Javafx, где я использую устройство MIDI (Akai APC Mini Mk2), и мне нужно сделать собственное изображение, используя Gluonfx. Проблема касается нативного изображения Gluonfx и использования MIDI.
Не забудьте прочитать ниже обновление 1 и 2.package org.example;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javax.sound.midi.MidiDevice.Info;
import javax.sound.midi.MidiSystem;
public class FindMidiApp extends Application {
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Find Midi");
ListView listView = new ListView();
VBox vbox = new VBox(10, listView);
try {
Info[] midiInfos = MidiSystem.getMidiDeviceInfo();
for (Info info : midiInfos) {
listView.getItems().add(String.format("%s - %s", info.getName(), info.getDescription()));
}
} catch (Exception e) {
e.printStackTrace();
}
Scene scene = new Scene(vbox, 500, 300);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
< /code>
Использование Maven, так что это POM: < /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
ListMidi
1.0-SNAPSHOT
UTF-8
11
11
org.openjfx
javafx-controls
23
com.gluonhq
gluonfx-maven-plugin
1.0.26
org.example.FindMidiApp
org.apache.maven.plugins
maven-compiler-plugin
3.8.0
11
org.openjfx
javafx-maven-plugin
0.0.6
org.example.FindMidiApp
< /code>
И это модуль info.java:
module org.example {
requires javafx.controls;
requires java.desktop;
exports org.example;
}
< /code>
Использование Windows 11. < /li>
Maven 3.9.10 < /li>
graalvm-java23-windows-amd64-gluon-23+25.1-dev (для строительства родного) < /li>
javaf 23 (hour intellij) < /li>
javaf 23. /> Gluonfx-maven-plugin 1.0.26 < /li>
openjdk 23 (при запуске в Intellij) < /li>
< /ul>
В интеллекте приложение работает нормально, и оно обнаруживает, что APC mini. https://docs.gluonhq.com/#platforms_windows Так что теперь я хочу превратить приложение в собственное изображение с помощью Gluonfx, чтобы я открываю нативную подсказку x64 и сначала просматриваю папку с проектом. Теперь я запускаю (на компьютере a):
mvn clean
и затем:
mvn gluonfx: runagent
apps и находит APC Mini. /> mvn gluonfx: build
создается нативное изображение, и я запускаю:
mvn gluonfx: nativerun
app uppen Хороший. MIDI_MAPPER »и« WAVETABLE SYNTE MICOSOFT GS - Внутренний программный синтезатор », который был найден на компьютере a. < /P>
Если я скопирую весь проект на компьютер B, и запускает его в IntelliJ, то все устройства MIDI найдены. Все устройства также обнаруживаются на компьютере B, если я запускаю MVN Glunfx: Runagent, но MVN Gluonfx: Nativerun (после Gluonfx: Build) только находит «Gervill - Software Midi Synthesizer» и «Sequencer в реальном времени - последователь программного обеспечения», и то же самое происходит, если я не использую генерируемое изображение непосредственно из папки. на компьютере б. И собственное изображение, сгенерированное на компьютере B, не работает, работая на компьютере b.
и! Когда нативное изображение, сгенерированное на компьютере B, работает на компьютере A, а затем работает, так что в целом работает нативное изображение на компьютере A, независимо от того, где оно генерируется. < /p>
Я не уверен, что это связано с кодом или общими окнами. Оба компьютера имеют одинаковую версию Windows и обновления. Я протестировал APC Mini с сторонним приложением, https://hautetechnique.com/midi/midiview/, и он находит Mini APC на обоих компьютерах. а): < /p>
import javax.sound.midi.MidiDevice;
import javax.sound.midi.MidiSystem;
public class Main {
public static void main(String[] args) {
MidiDevice.Info[] midiInfos = MidiSystem.getMidiDeviceInfo();
for (MidiDevice.Info info : midiInfos) {
System.out.println(info.getName() + " " + info.getDescription());
}
}
}
< /code>
Обновление 2: < /strong> < /p>
Хорошо, это интересно:
Я обнаружил, что наличие C: \ yy \ xx.jdks \ openjdk-24 \ bin определяется в среде с переменной среды на компьютере B, чтобы найти все устройства на компьютере, даже при использовании нативного изображения на компьютере. Ответ: нативное изображение не находит никаких устройств на компьютере B, потому что Java не определена в пути.
это так, как это должно быть?>
Подробнее здесь: https://stackoverflow.com/questions/796 ... idi-issues