Java –缺少字体–崩溃的应用程序!

Eclipse MAT和Heaphero都是分析大型堆转储的流行Java工具。 最近,当我们尝试在Eclipse MAT中分析堆转储文件时遇到了一个有趣的问题。 工具因缺少字体crash而崩溃。 我们认为我们将与您分享发现的结果。

CompositeStrike.getStrikeForSlot()中的ArrayIndexOutOfBoundsException

这是我们的环境:

  • Eclipse MAT 1.9
  • Java 8
  • Linux 3.10.0-862.34.2.el7.x86_64

当我们将堆转储文件上传到Eclipse MAT时,它失败并出现以下错误:

 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使用linux的fontconfig功能搜索等宽,SansSerif和serif字体。 Linux fontconfig旨在在系统中定位字体,并根据应用程序指定的要求选择字体。 如果缺少上述任何一种字体,则将导致上述异常。

如果您还遇到这种类型的问题,有3种潜在的解决方案来解决此问题:

1.安装缺少的字体

2.升级JDK

3.编辑OS字体配置

让我们详细讨论解决方案。

1.安装缺少的字体

您可以通过发出以下命令来尝试安装缺少的字体:

 yum install dejavu-serif-fonts 

2.升级JDK

这是一个已知的JDK错误,在OpenJDK,Oracle和IBM JDK错误数据库中进行了跟踪:

  • 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

甲骨文JDK 8u192

IBM JDK 8 SR5 FP37(8.0.5.37)

您可以升级到最新的JDK版本来解决此问题。

3.编辑OS字体配置

创建一个文件名/etc/fonts/local.conf。 在此文件中,将Utopia强制退回为Java使用的默认字体。

 <?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> 

翻译自: https://www.javacodegeeks.com/2020/02/java-missing-font-crashing-app.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

forever不重启 node_运维监控Prometheus,部署安全的node_exporter监控主机

简介prometheus监控系统的时候&#xff0c;是使用pull的方式来获取监控数据&#xff0c;需要被监控端监听对应的端口&#xff0c;prometheus从这些端口服务中拉取对应的数据。node_exporter安全性讨论node_exporter是收集操作系统的指标的一个程序。例如CPU&#xff0c;内存&am…

netbeans ide_IDE:5个最喜欢的NetBeans功能

netbeans ide愉快的发展……。 NetBeans具有许多有趣的功能 &#xff0c;这些功能使开发非常容易&#xff0c;只需很少的步骤&#xff0c;并且可以在非常快速地将产品推向市场的过程中创造出非常高效的环境 。 将我的谈话仅限于五个功能非常困难&#xff0c;而此IDE具有大量有…

python做excel麻烦_高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定!

原标题&#xff1a;高效办公必备&#xff1a;别人通宵做的 Excel,我用Python 半小时搞定&#xff01;最近经常听到周围的人抱怨&#xff1a;“工作忙&#xff0c;在加班……”不知不觉&#xff0c;当代职场人早就被“996”支配得体无完肤了&#xff0c;不仅身体吃尽熬夜加班的苦…

matlab resample,resample matlab实现

使用线性插值实现sample rate转换。function output simpleResample(input, inputfs, outputfs)inputLen length(input(:, 1));outputLen floor(inputLen * outputfs / inputfs);output zeros(outputLen, 1);timeStep inputfs / outputfs;curTime 1;integer 0;frac 0;f…

那是两个小时我不会回来

正如我之前关于linting主题所说的 &#xff0c;花时间修改代码的好处很有限&#xff0c;因为自动工具告诉您这样做。 更糟糕的是&#xff0c;这些工具并非万无一失。 例如&#xff0c;我们一直在针对完美无害的try-with-resources构造周围的SpotBugs警告中添加排除项&#xff…

php助手函数自定义,Laravel 添加自定义助手函数

前言在学习完教程中添加自定义助手函数文件时&#xff0c;还是得记录一下&#xff0c;感觉对composer知道的东西太少了&#xff0c;一些命令到底做了什么还是不知道&#xff0c;总结一下。添加自定义助手函数文件在开发项目的时候&#xff0c;有时候会定义一些函数&#xff0c;…

oracle 查询不同编号的时间最小记录_投稿 | ORACLE amp; PostgreSql 利用伪列删除完全重复的两行...

作者&#xff1a;缪晓丽DBA、数据库爱好者、从业10年。对 DB2、PostgreSQL、Oracle 均有较长的运维经验。本次演示的 test 表如下&#xff1a;01Oracle 的 rowidSQL 语句&#xff1a;DELETE FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY id ORDER BY id) AS rn, id, name…

jpa 实体映射视图_JPA教程:映射实体–第1部分

jpa 实体映射视图在本文中&#xff0c;我将讨论JPA中的实体映射过程。 至于我的示例&#xff0c;我将使用与 我以前的一篇文章中使用的模式相同的模式 。 在前两篇文章中&#xff0c;我解释了如何在Java SE环境中设置JPA。 我不打算为Web应用程序编写设置过程&#xff0c;因为…

php连接函数config,smarty内置函数config_load用法实例

本文实例讲述了smarty内置函数config_load用法。分享给大家供大家参考。具体如下&#xff1a;{config_load}用于从配置文件中&#xff0c;加载到配置变量。详细用法如下&#xff1a;配置文件&#xff1a;foo.conf说明&#xff1a;[Table] 和 [Customer] 表示段落名称。复制代码…

python写前端图形界面_如何Tkinter模块编写Python图形界面

一、为何使用Tkinter而非PyQt众所周知&#xff0c;在Python中创建图形界面程序有很多种的选择&#xff0c;其中PyQt和wxPython都是很热门的模块包&#xff0c;这些第三方的图形界面模块功能强大、配置丰富&#xff0c;界面美观&#xff0c;是很多人的选择。州的先生也经常使用P…

适用于应用程序错误的AWS警报

监视对于任何实际应用都是关键的。 您必须知道正在发生的事情&#xff0c;并在发生问题时实时得到警报。 AWS拥​​有CloudWatch&#xff0c;可以自动为您提供大量指标。 但是&#xff0c;您必须定义一些自己的东西。 然后&#xff0c;您需要定义适当的警报。 在这里&#xff…

addcslashes php,php addcslashes函数怎么用

php addcslashes函数返回在指定字符前添加反斜杠的字符串。其语法是addcslashes(string,characters)&#xff0c;参数string是必须的&#xff0c;规定要转义的字符串&#xff0c;characters是必须&#xff0c;规定要转义的字符或字符范围。addcslashes函数怎么用&#xff1f;作…

struct类型重定义 不同的基类型_C++构造数据类型

结构体(struct)定义&#xff1a;结构体是一个数据类型&#xff0c;是由多个不同类型的数据组成的数据集合。关键字为&#xff1a;struct 。优点&#xff1a;大大减少程序代码的离散性&#xff0c;使程序代码阅读更加符合逻辑。语法&#xff1a;struct 结构体类型名{ 成员类型 成…

卡夫卡队列_卡夫卡编年史队列基准

卡夫卡队列总览 最近&#xff0c;我被要求比较《卡夫卡》和《编年史》的性能。 没有两个产品是完全一样的&#xff0c;要进行公平的比较并不容易。 我们可以尝试运行类似的测试&#xff0c;看看我们得到了什么结果。 该测试基于Apache Kafka性能结果 。 测试使用了什么&#…

php zip怎么安装,php如何安装zip模块?(方法介绍)

php 安装zip模块为php安装zip扩展wget http://pecl.php.net/get/zip-1.13.5.tgz tar -zvxf zip-1.13.5.tgz cd zip-1.13.5 /home/xxx/php/bin/phpize出现错误&#xff1a;Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment va…

vs如何写多线程_java中的多线程的示例

在讨论多线程之前&#xff0c;让我们先讨论线程。线程是进程中轻量级的最小部分&#xff0c;可以与同一进程的其他部分(其他线程)并发运行。线程是独立的&#xff0c;因为它们都有独立的执行路径&#xff0c;这就是为什么如果一个线程中发生异常&#xff0c;它不会影响其他线程…

OCA第4部分中的Java难题

在Java Puzzlers的第四部分中&#xff0c;我们有一些与char类型有关的东西。 public class Puzzler { public static void main(String[] args){ char myChar a ; myChar; System.out.println(myChar); } } 您可能已经猜到了。 它将打印“ b”&#xff0c;其原因是char类型是…

matlab mex路径,使用matlab进行mex编译时的路径问题mexopts

matlab和vs 进行混合编程时总需要使用matlab编译mexFunction.cpp文件。这些文件免不了使用include下的*.h和lib下的*.lib文件。举matlab和vs 进行混合编程时总需要使用matlab编译mexFunction.cpp文件。这些文件免不了使用include下的*.h和lib下的*.lib文件。举例说明&#xff0…

python怎么运行ln函数_Python基础篇(五)

bool用于判断布尔值的结果是True还是False>>> bool("a")True>>> bool(3)True>>> bool("")False>>> bool(0)FalsePython中的elif类似于Java中的elseif>>> number (int)(input("input a number: ")…

hystrix应用 博客_用Hystrix保护您的应用程序

hystrix应用 博客在先前的帖子http://www.javacodegeeks.com/2014/07/rxjava-java8-java-ee-7-arquillian-bliss.html中&#xff0c;我们讨论了微服务以及如何使用&#xff08;RxJava&#xff09;的Reactive Extensions编排微服务。 但是&#xff0c;如果一项或多项服务因已停止…