Метод GetResource не работает в Java 11 - PullRequest
0 голосов
/ 23 января 2019

Это моя структура проекта: enter image description here

Это мой модуль-информация:

open module org.client.main {
    exports org.apj.client.app;
    requires javafx.controls;
    requires javafx.base;
    requires javafx.fxml;
    requires spring.context;
    requires spring.web;
    requires java.sql;
    requires spring.beans;
    requires spring.core;
}

Это мой родительский файл сборки Gradle:

subprojects {
    afterEvaluate {
        repositories {
            jcenter()
        }

        compileJava {
            doFirst {
                options.compilerArgs = [
                        '--module-path', classpath.asPath,
                ]
                classpath = files()
            }
        }

        compileTestJava {
            inputs.property("moduleName", moduleName)
            doFirst {
                options.compilerArgs = [
                        '--module-path', classpath.asPath,
                        '--add-modules', 'junit',
                        '--add-reads', "$moduleName=junit",
                        '--patch-module', "$moduleName=" + files(sourceSets.test.java.srcDirs).asPath,
                ]
                classpath = files()
            }
        }

        test {
            inputs.property("moduleName", moduleName)
            doFirst {
                jvmArgs = [
                        '--module-path', classpath.asPath,
                        '--add-modules', 'ALL-MODULE-PATH',
                        '--add-reads', "$moduleName=junit",
                        '--patch-module', "$moduleName=" + files(sourceSets.test.java.outputDir).asPath,
                ]
                classpath = files()
            }
        }
    }
}

Это мой файл сборки клиентского модуля:

plugins {
    id 'java'
}

group 'APJ'
version '1.0-SNAPSHOT'

sourceCompatibility = 11

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.springframework', name: 'spring-webmvc', version: '5.1.4.RELEASE'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

ext.moduleName = 'org.client.main'

Я пытаюсь получить ресурс для FXMLLoader, но просто не могу заставить его работать. Я боролся в течение 2 часов, и я действительно отчаялся прямо сейчас. Я пытался как любая возможная комбинация имени файла, каждого возможного местоположения, но все еще это возвращает нуль.

Также я попробовал ClassLoader.getSystemClassLoader().getResource("/login.fxml") getClass().getResource("/login.fxml") Но это тоже не работает.

Может кто-нибудь помочь мне с этим? Буду очень признателен.

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Я заметил, что в Java 11 есть 2 варианта работы getResource:

  1. использовать плагин 'org.openjfx.javafxplugin' version '0.0.7' или
  2. используйте '--patch-module' в ссылке, предоставленной Slaw выше: Куда идут файлы ресурсов в проекте Gradle, который создает модуль Java 9?

    run {
    doFirst {
        jvmArgs = [
                '--module-path', classpath.asPath,
                '--patch-module', "$moduleName=" + files(sourceSets.main.output.resourcesDir).asPath,
                '--module', mainClassName
        ]       
    }
    }
    
0 голосов
/ 25 января 2019

Итак, я решил свою проблему с помощью java.io.File.Сначала я создал новый файл и проверил, где он сохраняется.Затем, поскольку теперь я знаю корневой каталог, я нашел свой путь к своему ресурсу и создал новый объект File - File myFile = new File("path_to_my_resource").Затем я получил URL с использованием методов toURI и toURL - myFile.toURI().toURL().

Это определенно хак, но если кто-то борется, как я, его можно использовать как быстрое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...