Eclipse MAT , Heaphero — все это популярные Java-инструменты для анализа больших дампов кучи. Недавно мы столкнулись с интересной проблемой при попытке проанализировать файл дампа кучи в Eclipse MAT. Инструмент падал из-за отсутствия шрифта ?. Мы думали, что поделимся с вами тем, что узнали.
ArrayIndexOutOfBoundsException в CompositeStrike.getStrikeForSlot ()
Вот наша среда:
- Eclipse MAT 1.9
- Java 8
- Linux 3.10.0-862.34.2.el7.x86_64
Когда мы загрузили наш файл дампа кучи в Eclipse MAT, произошел сбой со следующей ошибкой:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
java.lang.ArrayIndexOutOfBoundsException: 0 at sun.font.CompositeStrike.getStrikeForSlot(CompositeStrike.java:75) at sun.font.CompositeStrike.getFontMetrics(CompositeStrike.java:93 at sun.font.FontDesignMetrics.initMatrixAndMetrics(FontDesignMetrics.java:359) at sun.font.FontDesignMetrics.<init>(FontDesignMetrics.java:350) at sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:302) at sun.java2d.SunGraphics2D.getFontMetrics(SunGraphics2D.java:863) at org.eclipse.birt.chart.device.swing.SwingTextMetrics.reuse(SwingTextMetrics.java:123) at org.eclipse.birt.chart.device.TextAdapter.reuse(TextAdapter.java:36) at org.eclipse.birt.chart.device.swing.SwingTextMetrics.<init>(SwingTextMetrics.java:86) at org.eclipse.birt.chart.device.swing.SwingDisplayServer.getTextMetrics(SwingDisplayServer.java:194) at org.eclipse.birt.chart.device.DisplayAdapter.getTextMetrics(DisplayAdapter.java:138) at org.eclipse.birt.chart.computation.BIRTChartComputation.getTextMetrics(BIRTChartComputation.java:36) at org.eclipse.birt.chart.computation.LegendBuilder$LegendData.<init>(LegendBuilder.java:108) at org.eclipse.birt.chart.computation.LegendBuilder.compute(LegendBuilder.java:493) at org.eclipse.birt.chart.model.layout.impl.LegendImpl.getPreferredSize(LegendImpl.java:2059) at org.eclipse.birt.chart.internal.layout.LayoutManager$ChartLayout.<init>(LayoutManager.java:126) at org.eclipse.birt.chart.internal.layout.LayoutManager.doLayout_tmp(LayoutManager.java:1145) : : : |
Быстрый поиск в Google God показал эту интересную ветку StackOverflow . Вот краткий обзор этой темы. Java выполняет поиск шрифтов monospaced, SansSerif и serif с помощью функции fontconfig в linux. Linux fontconfig предназначен для поиска шрифтов в системе и их выбора в соответствии с требованиями, установленными приложениями. Если какой-либо из вышеперечисленных шрифтов отсутствует, это приведет к приведенному выше исключению
Если вы также столкнулись с проблемой такого типа, есть три возможных решения этой проблемы:
1. Установите отсутствующий шрифт
2. Обновите JDK
3. Отредактируйте конфигурацию шрифта ОС
Давайте обсудим решения в деталях.
1. Установите отсутствующий шрифт
Вы можете попробовать установить отсутствующий шрифт, выполнив следующую команду:
1
|
yum install dejavu-serif-fonts |
2. Обновите JDK
Это известная ошибка JDK, отслеживаемая в базах данных ошибок JJK OpenJDK, Oracle и IBM:
- https://bugs.openjdk.java.net/browse/JDK-8188030
- https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8188030
- http://www-01.ibm.com/support/docview.wss?uid=swg1IJ16655
Эта ошибка была исправлена после следующих выпусков:
Открыть JDK 8u192
Oracle JDK 8u192
IBM JDK 8 SR5 FP37 (8.0.5.37)
Вы можете обновить до последней версии JDK, чтобы решить эту проблему.
3. Отредактируйте конфигурацию шрифта ОС
Создайте имя файла /etc/fonts/local.conf. В этом файле используется Utopia в качестве шрифта по умолчанию, используемого Java.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?xml version= '1.0' ?> <!DOCTYPE fontconfig SYSTEM 'fonts.dtd' > <fontconfig> <alias> <family>serif</family> <prefer><family>Utopia</family></prefer> </alias> <alias> <family>sans-serif</family> <prefer><family>Utopia</family></prefer> </alias> <alias> <family>monospace</family> <prefer><family>Utopia</family></prefer> </alias> <alias> <family>dialog</family> <prefer><family>Utopia</family></prefer> </alias> <alias> <family>dialoginput</family> <prefer><family>Utopia</family></prefer> </alias> </fontconfig> |
Опубликовано на Java Code Geeks с разрешения Рама Лакшманана, партнера нашей программы JCG . Смотреть оригинальную статью здесь: Java — Отсутствует шрифт — Crashing App! Мнения, высказанные участниками Java Code Geeks, являются их собственными. |