Я пытаюсь создать приложение с javaFX, используя javaFXPorts, и это последнее препятствие, которое мне нужно преодолеть.
Мой запуск ./gradlew работает нормально - все функции есть, как я и ожидал. Однако, когда я создаю APK и запускаю его на своем телефоне, всякий раз, когда я пытаюсь получить доступ к меню «Профиль», которое является единственным меню для использования файлов fxml в этой новой сборке моего приложения, программа падает.
Моя программа также использует файлы CSV для хранения информации. У меня была аналогичная проблема при попытке загрузить их - мое приложение загружало его сразу после запуска, что приводило к черному экрану.
Однако, просто добавив «сырую» подпапку в мой каталог ресурсов и обновив расположение CSV-файла, это исправили — и все это несмотря на то, что на моей машине разработки все работало нормально, когда я запускал ./gradlew. Я подозреваю, что это связано с тем, что APK не упаковывал CSV-файлы, поэтому при попытке доступа к ним произошел естественный сбой.
Я подозреваю, что здесь происходит нечто подобное, в том смысле, что APK на самом деле не упаковывает файлы fxml и дает сбой при попытке доступа к нему.
Вот мой каталог файлов.
Как видите, у меня есть файл fxml в папке src/main/resources/scenes/...
И загрузите его в мою программу, используя:
private FXMLLoader loader;
loader = new FXMLLoader(getClass().getResource("/scenes/profile.fxml"));
loader.setController(this);
mainPane.setCenter(loader.load());
И это работает на моей машине разработки.
Я нашел аналогичный вопрос без ответа 3 года назад:
файл FXML внутри проекта javafxports
Мой build.gradle выглядит следующим образом:
/*
* This build file was generated by the Gradle 'init' task.
*
* This generated file contains a sample Java project to get you started.
* For more details take a look at the Java Quickstart chapter in the Gradle
* user guide available at https://docs.gradle.org/4.1/userguide/tutorial_java_projects.html
*/
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.javafxports:jfxmobile-plugin:1.3.17'
}
}
plugins {
id 'java'
id 'application'
//id 'org.openjfx.javafxplugin' version '0.0.8'
}
apply plugin:'org.javafxports.jfxmobile'
mainClassName = "src.main.java.MainScreen"
jfxmobile {
javafxportsVersion = '8.60.12'
android {
applicationPackage = 'org.javafxports.ensemble'
compileSdkVersion = '27'
androidSdk = 'C:/Users/Luke/AppData/Local/Android/Sdk'
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
}
}
ios {
forceLinkClasses = ['ensemble.**.*']
}
}
repositories {
jcenter()
maven {
url 'http://nexus.gluonhq.com/nexus/content/repositories/releases/'
}
mavenCentral()
}
dependencies {
// This dependency is found on compile classpath of this component and consumers.
compile 'com.google.guava:guava:22.0'
// Use JUnit test framework
testCompile 'junit:junit:4.12'
testCompile 'org.testfx:testfx-junit:4.0.15-alpha'
testCompile 'org.hamcrest:hamcrest-all:1.3'
compile "com.opencsv:opencsv:4.0"
compile 'com.gluonhq:charm:5.0.0'
}
allprojects {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
}
Какой должна быть правильная файловая структура для упаковки FXML? Я пытался поместить его в исходную папку и просто подтолкнуть в папку основных ресурсов, но безрезультатно.
adb logcat
, чтобы узнать об исключениях, которые вы получаете при запуске вашего приложения, которые вызывают сбои или черный экран. Затем посмотрите, можете ли вы их исправить, иначе опубликуйте их здесь. - person José Pereda   schedule 23.01.2020