是这样,最近在折腾一个游戏掌机,使用的是 arm 处理器和 linux 系统,也就是所谓的开源掌机
。
我的童年其实更多是 手机游戏,以前的java me
和早期的android
,所以就有了移植java me
游戏到这个掌机上的想法。
在 github 上有个开源项目叫 freej2me ,可以提供 java me 需要的类,绘图方面,可以使用 jni 直接写入 framebuffer ,或者使用 sdl 。
oracle 的 jre8 arm 我试了下,可以在上面运行,最近断断续续折腾了一两个月,最近被卡住的一个问题就是,所有的步骤几乎都完成了,也可以使用 java 显示画面了。就是 java 的 BufferedImage 调用显示文字的时候,会有一个空指针异常。
错误大概如下
Fontconfig error: Cannot load default config file
Fontconfig error: Cannot load default config file
Exception in thread "Test" java.lang.Error: Probable fatal error:No fonts found.
at sun.font.SunFontManager.getDefaultPhysicalFont(SunFontManager.java:1246)
at sun.font.SunFontManager.initialiseDeferredFont(SunFontManager.java:1110)
at sun.font.SunFontManager.initialiseDeferredFonts(SunFontManager.java:937)
at sun.font.SunFontManager.loadFonts(SunFontManager.java:3327)
at sun.awt.X11FontManager.loadFonts(X11FontManager.java:460)
at sun.font.SunFontManager.findFont2D(SunFontManager.java:2358)
at sun.font.SunFontManager.getDefaultPhysicalFont(SunFontManager.java:1230)
at sun.font.SunFontManager.initialiseDeferredFont(SunFontManager.java:1110)
at sun.font.SunFontManager.initialiseDeferredFonts(SunFontManager.java:937)
at sun.font.SunFontManager.loadFonts(SunFontManager.java:3327)
at sun.awt.X11FontManager.loadFonts(X11FontManager.java:460)
at sun.font.SunFontManager.findFont2D(SunFontManager.java:2358)
at sun.font.SunFontManager.getDefaultPhysicalFont(SunFontManager.java:1230)
at sun.font.SunFontManager.initialiseDeferredFont(SunFontManager.java:1110)
at sun.font.SunFontManager.initialiseDeferredFonts(SunFontManager.java:937)
at sun.font.SunFontManager.loadFonts(SunFontManager.java:3327)
at sun.awt.X11FontManager.loadFonts(X11FontManager.java:460)
at sun.font.SunFontManager.findFont2D(SunFontManager.java:2358)
at sun.font.SunFontManager.getDefaultPhysicalFont(SunFontManager.java:1230)
at sun.font.SunFontManager.initialiseDeferredFont(SunFontManager.java:1110)
at sun.font.SunFontManager.initialiseDeferredFonts(SunFontManager.java:937)
at sun.font.SunFontManager.loadFonts(SunFontManager.java:3327)
at sun.awt.X11FontManager.loadFonts(X11FontManager.java:460)
at sun.font.SunFontManager.findFont2D(SunFontManager.java:2358)
at sun.font.SunFontManager.getDefaultPhysicalFont(SunFontManager.java:1230)
at sun.font.SunFontManager.initialiseDeferredFont(SunFontManager.java:1110)
at sun.font.SunFontManager.initialiseDeferredFonts(SunFontManager.java:937)
at sun.font.SunFontManager.loadFonts(SunFontManager.java:3327)
at sun.awt.X11FontManager.loadFonts(X11FontManager.java:460)
at sun.font.SunFontManager.findFont2D(SunFontManager.java:2358)
at sun.font.SunFontManager.getDefaultPhysicalFont(SunFontManager.java:1230)
at sun.font.SunFontManager.initialiseDeferredFont(SunFontManager.java:1110)
at sun.font.SunFontManager.initialiseDeferredFonts(SunFontManager.java:937)
at sun.font.SunFontManager.loadFonts(SunFontManager.java:3327)
at sun.awt.X11FontManager.loadFonts(X11FontManager.java:460)
at sun.font.SunFontManager.findFont2D(SunFontManager.java:2358)
at sun.font.SunFontManager.getDefaultPhysicalFont(SunFontManager.java:1230)
at sun.font.SunFontManager.initialiseDeferredFont(SunFontManager.java:1110)
at sun.font.SunFontManager.initialiseDeferredFonts(SunFontManager.java:937)
at sun.font.SunFontManager.loadFonts(SunFontManager.java:3327)
at sun.awt.X11FontManager.loadFonts(X11FontManager.java:460)
at sun.font.SunFontManager.findFont2D(SunFontManager.java:2358)
at sun.font.SunFontManager.getDefaultPhysicalFont(SunFontManager.java:1230)
at sun.font.SunFontManager.initialiseDeferredFont(SunFontManager.java:1110)
at sun.font.CompositeFont.doDeferredInitialisation(CompositeFont.java:287)
at sun.font.CompositeFont.getSlotFont(CompositeFont.java:376)
at sun.font.CompositeGlyphMapper.initMapper(CompositeGlyphMapper.java:81)
at sun.font.CompositeGlyphMapper.<init>(CompositeGlyphMapper.java:62)
at sun.font.CompositeFont.getMapper(CompositeFont.java:433)
at sun.font.GlyphList.mapChars(GlyphList.java:269)
at sun.font.GlyphList.setFromString(GlyphList.java:244)
at sun.java2d.pipe.GlyphListPipe.drawString(GlyphListPipe.java:71)
at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:2933)
at org.tw.pi.framebuffer.TestFrameBuffer$1.run(TestFrameBuffer.java:111)
原因应该就是 jre 依赖于fontconfig
,而这个 linux 上并没有 fontconfig
,我添加了其他同型号机型编译的 fontconfig 的 so,和 fonts.conf
配置文件,依然是报错找不到字体。
另外,jre 目录下 lib 中是有字体文件的,我也指定了字体配置的环境变量
还是需要自己编译一个 fontconfig ? 但是编译好之后又该怎么做呢,因为这个系统你是不方便往 /usr
这些目录写文件的,第三方程序都被挂载在 sd 卡目录 /mnt/SDCARD
,我编译后方便安装在 sd 卡中吗
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.