Java class.getRessource (). GetPath () добавляет странный символ '/' в начале URL - PullRequest
2 голосов
/ 03 апреля 2020

Я хочу загрузить шрифт в SWT. Мой файл ttf находится в каталоге resources/fonts моего проекта Maven. Я пытаюсь загрузить его так:

URL fontURL = MyClass.class.getResource("/fonts/myfont.ttf");
boolean fontLoaded = display.loadFont(fontURL.getPath());

Но полученное логическое значение всегда ложно. Я попытался подсказать результат fontURL.getPath(), и это что-то вроде /C:/Users/myuser/Documents/.... Если я копирую этот результат в строку, удаляю первый / и пытаюсь вызвать с ним display.loadFont(), это работает.

Еще одна странная вещь - это не единственный ресурс, который я загружаю таким образом. Например, вот как я загружаю значок окна:

URL iconURL = MyClass.class.getResource("/images/myicon.png");
Image icon = new Image(display, iconURL.getPath());
shell.setImage(icon);

И все работает отлично. Единственная проблема с созданием файла - это файл шрифта. Кто-нибудь знает почему?

1 Ответ

2 голосов
/ 04 апреля 2020

Причина для / в начале заключается в том, что getPath класса URL возвращает путь URL, определенный как RF C 2396 (см. javadocs ) .

Что касается того, почему он работает для конструктора Image, а не для метода loadFont(), ответ можно найти в реализации. Конструктор использует FileInputStream, который внутренне нормализует путь, тогда как loadFont() имеет встроенную реализацию для загрузки, которая не поддерживает такой путь.

Поскольку в обоих случаях ожидается путь к файлу, то, что вы хотите сделать самостоятельно нормализовать путь, используя либо конструктор File, либо метод Paths.get(url.toURI()).toString().

...