Я написал программу в Java с NetBeans и построил для нее простой GUI, но использовал некоторые внешние шрифты .ttf, которые я поместил вручную в пакет в папке sr c. Класс, который использует шрифты, находится в том же пакете, что и файл .ttf. Я написал код ниже, как я импортировал его в Java (который я получил от StackOverflow :)). Моя проблема в том, что если я запускаю свою программу в Netbeans, она прекрасно работает, но если я соберу ее с помощью Java Ant и выполню .jar, она не загрузит шрифты. Я уже читал, что файл .jar не может работать с классом Java «File», но я также пытался использовать его с getResourceAsStream, но он тоже не работал. Извините, это мой первый вопрос о переполнении стека, но я был бы рад, если бы кто-нибудь смог мне помочь.
Редактировать: Обновлен код
Пакет GUI содержит класс EntryDlG и Montserrat -SemiBold.ttf File
public class EntryDLG extends javax.swing.JDialog {
public static Font MontserratSemiBold20; //Declaration
public EntryDLG(java.awt.Frame parent, boolean modal) { //Constructor
importFonts();
jLabel2.setFont(MontserratSemiBold20);
}
public static void importFonts(){
try{
MontserratSemiBold20 = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream(new File("src\\GUI\\Montserrat-SemiBold.ttf"))).deriveFont(Font.PLAIN, 20);
GraphicsEnvironment ge1 = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge1.registerFont(MontserratSemiBold20);
}
catch(IOException | FontFormatException e){
e.printStackTrace();
}
}
}
Java -Ant:
Compiling 16 source files to C:\...\DartTournamentApp\build\classes
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Copying 6 files to C:\...\DartTournamentApp\build\classes
compile:
Created dir: C:\...\DartTournamentApp\dist
Copying 1 file to C:\...\DartTournamentApp\build
Building jar: C:\...\DartTournamentApp\dist\DartTournamentApp.jar
Возможно, проблема в том, что Ant компилирует только 16 файлов (Projects содержит ровно 16 Java -Class файлы). В этих 16 файлах файлы .ttf НЕ включены!
Решено: После еще большего исследования я попытался:
MontserratSemiBold20 = Font.createFont(Font.TRUETYPE_FONT, getClass().getClassLoader().getResourceAsStream("GUI/Montserrat-SemiBold.ttf")).deriveFont(20f);
И потому что теперь правильный путь в Netbeans и в .jar , это работает для обоих.