Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Ресурсы приложения / 14 сообщений из 14, страница 1 из 1
03.02.2021, 13:20
    #40041113
Игорёк2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы приложения
Есть приложение JavaFx со стандартной структурой. Без module-info запускается без проблем, а с данным файлом не видит ресурсов(fxml, png). Почему?
...
Рейтинг: 0 / 0
03.02.2021, 13:50
    #40041138
Dmitry Eliseev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы приложения
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <encoding>${encoding}</encoding>
                            <outputDirectory>${modules.dir}/${module.name}</outputDirectory>
                            <resources>
                                <resource>
                                    <filtering>true</filtering>
                                    <directory>${basedir}/src/main/resources</directory>
                                    <include>**/*</include>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
...
Рейтинг: 0 / 0
03.02.2021, 14:35
    #40041167
Игорёк2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы приложения
Dmitry Eliseev, и что указать в getResources ?
...
Рейтинг: 0 / 0
03.02.2021, 15:19
    #40041212
Dmitry Eliseev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы приложения
Игорёк2
Dmitry Eliseev, и что указать в getResources ?


то что и было.
Обычно у меня структура:
Код: plaintext
1.
2.
3.
4.
5.
src/
    main/
         resources/
                 fxml/
                      some.fxml

и в коде:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
        try (InputStream inputStream = getClass().getResourceAsStream("/fxml/some.fxml")) {
            Parent parent = FXMLLoader.load(inputStream);
            stage.setScene(new Scene(parent));
            stage.setTitle("title");
            stage.show();
        } catch (IOException ioException) {
            logger.error("Unable to load Library scene", ioException);
        }
...
Рейтинг: 0 / 0
03.02.2021, 16:05
    #40041252
Игорёк2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы приложения
Dmitry Eliseev, вот это и не работает. Структура такая как у вас.
...
Рейтинг: 0 / 0
03.02.2021, 16:33
    #40041266
Dmitry Eliseev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы приложения
Игорёк2
Dmitry Eliseev, вот это и не работает. Структура такая как у вас.

Я к сожалению не телепат.
Можете подробнее написать, что именно не работает. Какой Exception он бросает ?
...
Рейтинг: 0 / 0
04.02.2021, 08:18
    #40041425
Игорёк2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы приложения
Dmitry Eliseev,
Пишу в Idea
ресурс в
src/main/resources/ui/main.fxml
Код в
src/main/java/Pack1/Main.java

Код: java
1.
Parent root=loader.load( getClass().getResource("/ui/main.fxml"));



Caused by: java.lang.NullPointerException: Location is required.

В Idea не запускается при наличии module-info. Jar запускается при любом раскладе.
...
Рейтинг: 0 / 0
04.02.2021, 08:21
    #40041427
Игорёк2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы приложения
Module-info

Код: java
1.
2.
3.
4.
5.
6.
module Project.main {
    requires javafx.graphics;
    requires javafx.fxml;
    exports Pack1;

}
...
Рейтинг: 0 / 0
04.02.2021, 19:51
    #40041808
Dmitry Eliseev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы приложения
Попробуте прочитать InputStream и убедиться что файл загрузился в поток
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    @Override
    public void start(Stage stage) throws IOException {
        var fxmlLoader = new FXMLLoader();
        try (InputStream inputStream = getClass().getResourceAsStream("/ui/main.fxml")) {
            Parent root = fxmlLoader.load(inputStream);
            scene = new Scene(root, 640, 480);
            stage.setScene(scene);
            stage.show();
        }
    }



В IDE нужно добавить SDK для OpenJFX или запускать через плагин
Код: xml
1.
2.
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>



mvn javafx:run
...
Рейтинг: 0 / 0
05.02.2021, 01:04
    #40041896
Dmitry Eliseev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы приложения
Вот шаблонный проект, в котором всё работает https://gitlab.com/Madzi/mango
...
Рейтинг: 0 / 0
05.02.2021, 08:28
    #40041927
Игорёк2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы приложения
Dmitry Eliseev, спасибо что уделяете внимание. У меня проект Gradle
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
plugins {
    id 'java'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.9'
    id 'org.beryx.jlink' version '2.23.3'
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

mainClassName = "Pack1.Main"

application{
    mainModule="Project.main"
}


javafx {
    sdk='E:/Downloads/javafx-sdk-15.0.1'
    modules = [ 'javafx.controls', 'javafx.fxml' ]


}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'

    implementation fileTree(dir: 'libs', include: ['*.jar'])



}
jlink {
    launcher {
        name = 'ProjectRun'
    }
}


jar {
    manifest {
        attributes "Main-Class": "$mainClassName"
    }

    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}



И через InputStream тоже Caused by: java.lang.NullPointerException: inputStream is null.
...
Рейтинг: 0 / 0
05.02.2021, 14:19
    #40042131
Dmitry Eliseev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы приложения
Полагаю что дело в структуре каталогов.
Когда вы указываете "/ui/main.fxml" то первый слеш означает корневой каталог. В моём случае это "src/main/resources" как Gradle строит структуру я не знаю.
Могу предположить что она чем-то отличается от Maven.
В таком случае можете попробовать "поискать" ваши ресурсы например в "src/main/resources/ui/main.fxml"
...
Рейтинг: 0 / 0
05.02.2021, 21:32
    #40042370
maxkar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы приложения
Игорёк2,

Ну так там (в Idea) баг :).
Может быть, есть workaround , я не проверял.
...
Рейтинг: 0 / 0
09.02.2021, 15:10
    #40043714
Игорёк2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы приложения
В общем такая фигня. если кому надо. Если файл module-info находится в папке модуля (на одном уровне с папкой java) то javac собирает модуль и приложение запускается в Idea и видит все ресурсы. Но почему то сама Idea не дает создавать этот файл на этом уровне, только внутри папки java. Приходится вручную переносить на уровень выше.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Ресурсы приложения / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]