Ошибка загрузки шейдеров после экспорта в .jar

Рейтинг: 1Ответов: 1Опубликовано: 11.04.2023

GitHub с этим движком (может поможет в решении проблемы).

Код, в котором проиходит загрузка шейдеров:

package org.kit.engine.shader;

import lombok.SneakyThrows;
import lombok.experimental.UtilityClass;
import lombok.val;

import java.nio.file.Files;
import java.nio.file.Paths;

@UtilityClass public class ShaderFactory {

    public ShaderProgram create(String vertexFile, String fragmentFile) {
        return new ShaderProgram(
                new VertexShader(readFile(vertexFile)),
                new FragmentShader(readFile(fragmentFile)));
    }

    @SneakyThrows private String readFile(String file) {
        val uri = ShaderFactory.class.getResource(file).toURI();
        System.out.println(uri);
        return Files.readString(Paths.get(uri));
    }

}

Ошибка:

Exception in thread "main" java.nio.file.FileSystemNotFoundException
    at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:169)
    at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:155)
    at java.base/java.nio.file.Path.of(Path.java:208)
    at java.base/java.nio.file.Paths.get(Paths.java:97)
    at org.kit.engine.shader.ShaderFactory.readFile(ShaderFactory.java:21)
    at org.kit.engine.shader.ShaderFactory.create(ShaderFactory.java:14)
    at org.kit.game.ParticleGame.start(ParticleGame.java:37)
    at org.kit.engine.Application.launch(Application.java:27)
    at org.kit.Main.main(Main.java:10)

Ответы

▲ 0

Попробуйте readFile(String file) определить следующим образом:

InputStream inStream = getClass().getResourceAsStream(file);
String string = new String(inStream.readAllBytes());
inStream.close();
return string;

Также попробуйте писать путь до внутренних ресурсов без '/' в начале.