Решено: Java Ant не упаковывает внешние, локальные шрифты .ttf в .jar - PullRequest
0 голосов
/ 24 марта 2020

Я написал программу в 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 , это работает для обоих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...