Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
6 / 4 / 1
Регистрация: 28.09.2016
Сообщений: 223

Как указать путь к файлу для Jar файла?

16.06.2020, 18:35. Показов 5535. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!
Никак не могу разобраться с поиском файла в папках.
Написал тестовую программу для загрузки и использования шрифта.(использую IntelliJIdea)
В папке, где находится программа есть папка "fonts" со шрифтом.
Программа загружает шрифт и использует его для вывода надписи.
Вот программа - у меня всё работает нормально.
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
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
 
public class ProblemaFile extends JPanel {
    JLabel mainLabel = new JLabel();
    private BufferedImage sr;
    Graphics2D g2;
    Font myArial;
    private Font myFontBig;
 
    ProblemaFile() {
        InputStream arialStream = Class.class.getResourceAsStream("/fonts/ARIALN.ttf");// загружаю файл из папки fonts, которая лежит в этом же каталоге
        try {
            myArial = Font.createFont(Font.TRUETYPE_FONT, arialStream); // создаю объект шрифт
        } catch (FontFormatException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        myFontBig = myArial.deriveFont(40f);// указываю размер шрифта
 
        JFrame myFrame = new JFrame();
        myFrame.setSize(300, 300);
        myFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        myFrame.setLayout(null);
        setLayout(null);
        setBounds(0, 0, 300, 300);
        myFrame.add(this);
        add(mainLabel);
        mainLabel.setBounds(0, 0, 300, 300);
        sr = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB);
        g2 = sr.createGraphics();
        g2.setColor(new Color(0,0,0));// цвет
        g2.setFont(myFontBig);// шрифт
        g2.drawString("ASDFGH",70,70);// делаю надпись
        mainLabel.setIcon(new ImageIcon(sr));// накладываю полученное изображение на mainLabel
        myFrame.setVisible(true);
    }
 
    public static void main(String[] args) {
        ProblemaFile pf = new ProblemaFile();
    }
}
Потом я создаю Jar-файл (я делаю это в IntelliJIdea). Но при запуске полученного Jar-файл получаю исключение:
java.io.IOException: Problem reading font data.
Насколько я понимаю, jar-файл не может найти файл со шрифтом. Т.к. это архив, то путь к файлу, наверное, изменился?
Видимо нужно как-то по другому указать к нему путь.
Подскажите, как это сделать?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.06.2020, 18:35
Ответы с готовыми решениями:

Как указать путь к файлу для работы
Работаю с xml файлом, app.xml, лежит в каталоге с проектом в папке App_Data. Для работы приходится писать полный путь к файлу ...

Как указать путь к файлу pdf для работы на всех ПК
Доброго времени суток. Дело вот в чем, программа в ходе работы обращается к файлу шаблону .dbf. Подскажите куда лучше разместить этот...

Как указать абсолютный путь к файлу для чтения в java приложении
Здравствуйте, столкнулся с нетривиальной проблемой. Необходимо считывать файл. На ноуте стоит винда, и при указании пути, все норм. При...

2
Модератор
Эксперт Java
 Аватар для alecss131
2856 / 1363 / 406
Регистрация: 11.08.2017
Сообщений: 4,352
Записей в блоге: 2
16.06.2020, 20:53
Лучший ответ Сообщение было отмечено pumaex как решение

Решение

Проверь лежит ли шрифт в джарнике и если лежит то где. Путь указываемый в ресурсе идет от корня джарника, то есть в вашей программе ищется грубо говоря по пути name.jar/fonts/ARIALN.ttf, а если папка со шрифтами в проекте рядом с классом в пакете то путь будет иным, не знаю как на вашей иде, но в мавене и эклипсе для ресурсов используется другая папка (в эклипсе создаю еще один каталог с именем resources и в настройках проекта помечаю его как каталог с исходниками), то есть ресурсы отдельно от кода и в проекте и в jar
1
6 / 4 / 1
Регистрация: 28.09.2016
Сообщений: 223
17.06.2020, 15:57  [ТС]
Спасибо. Вроде бы разобрался. Оказалось, что путь к шрифту необходимо указывать относительно папки src.
Почему-то для картинок это необязательно. И в IDE это не обязательно. Это и ввело в заблуждение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.06.2020, 15:57
Помогаю со студенческими работами здесь

Открытие файла в C# - как правильно указать путь к файлу, чтобы на другом компьютере не надо было его менять?
Здравствуйте! Подскажите пожалуйста как правильно указать путь к файлу что бы на другом компьютере не надо было его менять.... Он...

Указать путь к файлу для PictureBox
Подскажите пожалуйста, как программно указать путь к картинке для PictureBox? Необходимо, чтобы в одном PictureBox каждый раз появлялась...

Как указать путь к файлу?
После опубликации проекта. при запуске приложения просит базу данных в...

Как указать путь к файлу?
У меня есть проект UniversityRankings.Data и обязательно, чтобы файлs находились именно в самом проекте. Как указать путь к файлу...

Как указать путь к файлу
Всем привет! Как в Паскале написать правильно путь к текстовому файлу? Извините за флуд если что.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru