Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenJDK 11 java.lang.ClassCastException:类sun.font.CompositeFont不能强制转换为类sun.font.PhysicalFont_Java_Fonts_Java 11 - Fatal编程技术网

OpenJDK 11 java.lang.ClassCastException:类sun.font.CompositeFont不能强制转换为类sun.font.PhysicalFont

OpenJDK 11 java.lang.ClassCastException:类sun.font.CompositeFont不能强制转换为类sun.font.PhysicalFont,java,fonts,java-11,Java,Fonts,Java 11,我使用openJDK 11在Linux上运行junit测试,出现以下错误: java.lang.ClassCastException: class sun.font.CompositeFont cannot be cast to class sun.font.PhysicalFont (sun.font.CompositeFont and sun.font.PhysicalFont are in module java.desktop of loader 'bootstrap') at

我使用openJDK 11在Linux上运行junit测试,出现以下错误:

java.lang.ClassCastException: class sun.font.CompositeFont cannot be cast to class sun.font.PhysicalFont (sun.font.CompositeFont and sun.font.PhysicalFont are in module java.desktop of loader 'bootstrap')
    at java.desktop/sun.font.SunFontManager.getDefaultPhysicalFont(SunFontManager.java:1086)
    at java.desktop/sun.font.SunFontManager.initialiseDeferredFont(SunFontManager.java:965)
    at java.desktop/sun.font.SunFontManager.findOtherDeferredFont(SunFontManager.java:903)
    at java.desktop/sun.font.SunFontManager.findDeferredFont(SunFontManager.java:919)
    at java.desktop/sun.font.SunFontManager.findFont2D(SunFontManager.java:2120)
    at java.desktop/java.awt.Font.getFont2D(Font.java:506)
    at java.desktop/java.awt.Font.canDisplayUpTo(Font.java:2246)
    at java.desktop/java.awt.font.TextLayout.singleFont(TextLayout.java:469)
    at java.desktop/java.awt.font.TextLayout.<init>(TextLayout.java:530)
    at org.apache.poi.ss.util.SheetUtil.getDefaultCharWidth(SheetUtil.java:275)
    at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.<init>(AutoSizeColumnTracker.java:117)
    at org.apache.poi.xssf.streaming.SXSSFSheet.<init>(SXSSFSheet.java:82)
    at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:658)
    at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:679)
    at com.textb2.ui.controller.ExcelCreator.newSheet(ExcelCreator.java:135)
    at com.textb2.ui.controller.ExcelCreator.buildExcel(ExcelCreator.java:182)
    at com.textb2.ui.controller.ExcelCreatorTest.testNoData(ExcelCreatorTest.java:91)
    at com.textb2.ui.controller.ExcelCreatorTest.testGermany(ExcelCreatorTest.java:53)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
java.lang.ClassCastException:无法将类sun.font.CompositeFont强制转换为类sun.font.PhysicalFont(sun.font.CompositeFont和sun.font.PhysicalFont位于加载程序“引导”的模块java.desktop中)
位于java.desktop/sun.font.SunFontManager.getDefaultPhysicalFont(SunFontManager.java:1086)
位于java.desktop/sun.font.SunFontManager.initialiseDeferredFont(SunFontManager.java:965)
位于java.desktop/sun.font.SunFontManager.findOtherDeferredFont(SunFontManager.java:903)
位于java.desktop/sun.font.SunFontManager.findDeferredFont(SunFontManager.java:919)
位于java.desktop/sun.font.SunFontManager.findFont2D(SunFontManager.java:2120)
位于java.desktop/java.awt.Font.getFont2D(Font.java:506)
位于java.desktop/java.awt.Font.canDisplayUpTo(Font.java:2246)
位于java.desktop/java.awt.font.TextLayout.singleFont(TextLayout.java:469)
位于java.desktop/java.awt.font.TextLayout.(TextLayout.java:530)
位于org.apache.poi.ss.util.SheetUtil.getDefaultCharWidth(SheetUtil.java:275)
在org.apache.poi.xssf.streaming.AutoSizeColumnTracker上(AutoSizeColumnTracker.java:117)
位于org.apache.poi.xssf.streaming.SXSSFSheet.(SXSSFSheet.java:82)
位于org.apache.poi.xssf.streaming.sxsfworkbook.createandregistersxsfsheet(sxsfworkbook.java:658)
在org.apache.poi.xssf.streaming.sxsfworkbook.createSheet(sxsfworkbook.java:679)上
在com.textb2.ui.controller.ExcelCreator.newSheet上(ExcelCreator.java:135)
位于com.textb2.ui.controller.ExcelCreator.buildExcel(ExcelCreator.java:182)
位于com.textb2.ui.controller.ExcelCreatorTest.TestNodeData(ExcelCreatorTest.java:91)
位于com.textb2.ui.controller.ExcelCreatorTest.testGermany(ExcelCreatorTest.java:53)
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
位于java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.base/java.lang.reflect.Method.invoke(Method.java:566)
位于org.junit.runners.model.FrameworkMethod$1.runReflectVeCall(FrameworkMethod.java:50)
位于org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
位于org.junit.runners.model.FrameworkMethod.invokeeexplosive(FrameworkMethod.java:47)
位于org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
位于org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
位于org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
位于org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
位于org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
位于org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
访问org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
位于org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
位于org.junit.runners.ParentRunner.run(ParentRunner.java:363)
位于org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
位于org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
位于org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
位于java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.base/java.lang.reflect.Method.invoke(Method.java:566)
位于org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
位于org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
位于org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
位于org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
位于org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
不确定,但它一定与/usr/share/font中的字体有关。目前我在那里没有字体。我知道openJdk11不再包含字体。但我不知道该怎么办

谢谢

刚刚在旧版本中发现一个已修复的错误:

OpenJDK 11似乎不再包含一些与字体相关的内容,您的操作系统目前也没有自己提供任何内容

您可以尝试在操作系统中安装一些与字体相关的软件包,看看这是否解决了问题


另请参见Ubuntu 18.0.4 LTS上的发行说明,以下命令修复了该问题


sudo-apt-get-install-fontconfig

我认为您必须安装一些字体,否则在达到这一点之前您会得到一个NullPointerException

这个简单的程序运行正常吗?如果没有安装字体,它会失败吗

import java.awt.*;
public class Fonts
{
     public static void main(String[] args) throws Exception
     {
         Font defaultFont = Font.decode(null);
         System.out.println(defaultFont);
     }
}
我认为问题更多的是字体配置不正确,很明显getDefaultPhysicalFont()希望得到PhysicalFont类型的字体,但实际上得到的是CompositeFont类型的字体,不清楚为什么会发生这种情况

试着跑步

fc-cache -rv *pathoffonts*
e、 g


当我使用Jakarta Poi添加相同的错误时,这似乎对我有效,但是我还没有得到一致的结果。

为整个单元测试添加代码。请看:我的猜测是,您可能一直在使用内部sun类,这些类不一定存在
fc-cache -rv /usr/share/fonts