2013-03-31 1 views
0

Я добавил шрифт в свой JAR-файл из eclipse и пытаюсь использовать шрифт в JTextFields. При запуске приложения setText не рисуется, а просто - в JTextField. Я основывал свой код на Exporting font to jar in eclipse.Использование шрифта из моего JAR

Ниже мой код:

//lets load the font 
Font font = Font.createFont(Font.TRUETYPE_FONT, Main.class.getClassLoader().getResourceAsStream("Coalition_v2.ttf")); 
font.deriveFont(Font.PLAIN, 14); 

txtBrain = new JTextField(); 
txtBrain.setFont(font); 
txtBrain.setText("BRAIN"); 
txtBrain.setHorizontalAlignment(SwingConstants.CENTER); 
txtBrain.setEditable(false); 
txtBrain.setColumns(10); 
txtBrain.setBounds(521, 727, 90, 40); 
contentPane.add(txtBrain); 

Я знаю, что шрифт находится в правильном месте, как если бы я изменить .getResourceAsStream к /Coalition_v2.ttf тогда я получаю следующую ошибку из консоли:

java.io.IOException: Problem reading font data. 
    at java.awt.Font.createFont(Font.java:946) 

шрифт файл содержится в /SRC/

Выход из Jar -tvf по запросу:

0 Sun Mar 31 09:51:56 BST 2013 ngd/ 
    0 Sun Mar 31 09:51:56 BST 2013 ngd/co/ 
    0 Sun Mar 31 09:51:56 BST 2013 ngd/co/uk/ 
    0 Sun Mar 31 09:51:56 BST 2013 ngd/co/uk/TabSync/ 
    806 Sun Mar 31 08:53:20 BST 2013 ngd/co/uk/TabSync/About$1.class 
    556 Sun Mar 31 08:53:20 BST 2013 ngd/co/uk/TabSync/About$2.class 
    4762 Sun Mar 31 08:53:20 BST 2013 ngd/co/uk/TabSync/About.class 
    1802 Sun Mar 31 08:53:20 BST 2013 ngd/co/uk/TabSync/Help.class 
    733 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$1.class 
    735 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$10.class 
    1117 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$11.class 
    1117 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$12.class 
    1117 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$13.class 
    1117 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$14.class 
    1117 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$15.class 
    1120 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$16.class 
    1120 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$17.class 
    1120 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$18.class 
    1120 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$19.class 
    733 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$2.class 
    1120 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$20.class 
    735 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$21.class 
    735 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$22.class 
    735 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$23.class 
    735 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$24.class 
    735 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$25.class 
    735 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$26.class 
    735 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$27.class 
    735 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$28.class 
    735 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$29.class 
    733 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$3.class 
    735 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$30.class 
    1120 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$31.class 
    1120 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$32.class 
    1120 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$33.class 
    1120 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$34.class 
    1120 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$35.class 
    1120 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$36.class 
    1120 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$37.class 
    1120 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$38.class 
    1120 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$39.class 
    733 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$4.class 
    1120 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$40.class 
    4765 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$41.class 
    723 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$42.class 
    1185 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$43.class 
    697 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$44.class 
    1220 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$45.class 
    995 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$46.class 
    781 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$47.class 
    733 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$5.class 
    733 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$6.class 
    733 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$7.class 
    733 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$8.class 
    733 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$9.class 
    2097 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main$Field1Listener.class 
47217 Sun Mar 31 09:52:54 BST 2013 ngd/co/uk/TabSync/Main.class 
    1260 Sun Mar 31 08:53:20 BST 2013 ngd/co/uk/TabSync/FileFiltererpdf.class 
    1260 Sun Mar 31 08:53:20 BST 2013 ngd/co/uk/TabSync/FileFiltererjpg.class 
991552 Wed Jul 27 19:13:00 BST 2011 ngd/co/uk/TabSync/Coalition_v2.ttf 
991552 Wed Jul 27 19:13:00 BST 2011 Coalition_v2.ttf 
409717 Thu Mar 21 14:15:32 GMT 2013 nullpdf.pdf 
163009 Thu Mar 21 14:29:08 GMT 2013 Javasplash.jpg 

Код запускается из Main.class.

EDITED:

код теперь выглядит следующим образом:

Font font = Font.createFont(Font.TRUETYPE_FONT, this.getClass().getResourceAsStream("/Coalition_v2.ttf")).deriveFont(Font.PLAIN, 14); 

System.out.println(font) 

отсортирован. Спасибо за вашу помощь, и Эндрю за руль, в правильном направлении.

+0

* «Файл шрифта содержится в/src /» * Конкретно и укажите вывод 'jar -tvf the.jar' Какой пакет содержит код? –

+0

Измените 'Main.class.getClassLoader(). GetResourceAsStream (" Coalition_v2.ttf ")' на что-то большее, чем 'this.getClass(). GetResource ("/Coalition_v2.ttf ") // отмечаем ведущий '/'' для URL, затем распечатайте его, чтобы проверить, что оно найдено. –

+0

Ближе.Отредактировано с учетом обновления – andy

ответ

0

В методе createFont существует довольно странная обработка исключений. Если FontFormatException или IOException выловлены, то он просто заново закроется. Во всех остальных случаях будет сброшено:

throw new IOException("Problem reading font data."); 

Таким образом, ваш вопрос действительно не проблема IO.

Прежде всего, взгляните на этот пункт. Существует такой код в этом методе:

final File tFile = AccessController.doPrivileged(
    new PrivilegedExceptionAction<File>() { 
     public File run() throws IOException { 
      return File.createTempFile("+~JF", ".tmp", null); 
     } 
    } 
); 

Он пытается записать в папку temp. Вы должны проверить, есть ли у вашей программы доступ к этому.

+0

Извините, что я должен был быть более ясным в первом сообщении, ошибка возникает только в том случае, если я даю недопустимый путь к шрифту (IE/fontname), если я оставлю его с правильным путем, тогда я просто не получаю любой текст вообще с выбранным шрифтом. – andy

+0

Решение, если кто-либо найдет это в будущем из Google – andy

0

решение в случае, если кто считает, что это от Google был:

Font font = Font.createFont(Font.TRUETYPE_FONT, this.getClass().getResourceAsStream("/Coalition_v2.ttf")).deriveFont(Font.PLAIN, 14); 

System.out.println(font) 

Энди

3

Изменить

.. Main.class.getClassLoader().getResourceAsStream("Coalition_v2.ttf") .. 

..разработать что-то больше похоже ..

.. this.getClass().getResource("/Coalition_v2.ttf") // note leading '/' .. 

. . для URL-адреса тогда проверить его.

Ведущий / означает «искать корень пути класса» в отличие от текущего пакета или каталога.

 Смежные вопросы

  • Нет связанных вопросов^_^