On Fri, 13 May 2022 05:34:08 GMT, Tomator <d...@openjdk.java.net> wrote:
> When I used BlueJ, I found a problem with Chinese display. > /javafx.graphics/com/sun/javafx/font/CompositeGlyphMapper.java#getGlyphCode > may return a negative number when no font library is specified in Linux,and > this could cause java.lang.ArrayIndexOutOfBoundsException error.So > javafx.graphics/com/sun/prism/impl/GlyphCache.java#getCachedGlyph shou check > the glyphCode. > The crash demo like this: > `import javafx.application.Application; > import javafx.scene.Scene; > import javafx.scene.control.Menu; > import javafx.scene.control.MenuBar; > import javafx.scene.control.MenuItem; > import javafx.scene.layout.BorderPane; > import javafx.stage.Stage; > > public class MenuExample extends Application { > public static void main(String[] args) { > launch(args); > } > > @Override > public void start(Stage primaryStage) throws Exception { > BorderPane root = new BorderPane(); > Scene scene = new Scene(root,200,300); > MenuBar menubar = new MenuBar(); > Menu FileMenu = new Menu("文本"); > MenuItem filemenu1=new MenuItem("新建"); > MenuItem filemenu2=new MenuItem("Save"); > MenuItem filemenu3=new MenuItem("Exit"); > Menu EditMenu=new Menu("Edit"); > MenuItem EditMenu1=new MenuItem("Cut"); > MenuItem EditMenu2=new MenuItem("Copy"); > MenuItem EditMenu3=new MenuItem("Paste"); > EditMenu.getItems().addAll(EditMenu1,EditMenu2,EditMenu3); > root.setTop(menubar); > FileMenu.getItems().addAll(filemenu1,filemenu2,filemenu3); > menubar.getMenus().addAll(FileMenu,EditMenu); > primaryStage.setScene(scene); > primaryStage.setTitle("TEST"); > primaryStage.show(); > > } > } ` > > the error: > `java.lang.ArrayIndexOutOfBoundsException: Index -25 out of bounds for length > 32 > at com.sun.prism.impl.GlyphCache.getCachedGlyph(GlyphCache.java:332) > at com.sun.prism.impl.GlyphCache.render(GlyphCache.java:148) > at > com.sun.prism.impl.ps.BaseShaderGraphics.drawString(BaseShaderGraphics.java:2101) > at com.sun.javafx.sg.prism.NGText.renderText(NGText.java:312) > at com.sun.javafx.sg.prism.NGText.renderContent2D(NGText.java:270) > at com.sun.javafx.sg.prism.NGShape.renderContent(NGShape.java:261) > at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2072) > at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1964) > at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:270) > at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:578) > at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2072) > at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1964) > at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:270) > at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:578) > at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2072) > at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1964) > at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:270) > at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:578) > at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2072) > at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1964) > at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:270) > at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:578) > at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2072) > at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1964) > at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:270) > at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:578) > at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2072) > at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1964) > at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:479) > at > com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:328) > at > com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:91) > ` The crash demo like this: `import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.MenuItem; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; public class MenuExample extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { BorderPane root = new BorderPane(); Scene scene = new Scene(root,200,300); MenuBar menubar = new MenuBar(); Menu FileMenu = new Menu("文本"); MenuItem filemenu1=new MenuItem("新建"); MenuItem filemenu2=new MenuItem("Save"); MenuItem filemenu3=new MenuItem("Exit"); Menu EditMenu=new Menu("Edit"); MenuItem EditMenu1=new MenuItem("Cut"); MenuItem EditMenu2=new MenuItem("Copy"); MenuItem EditMenu3=new MenuItem("Paste"); EditMenu.getItems().addAll(EditMenu1,EditMenu2,EditMenu3); root.setTop(menubar); FileMenu.getItems().addAll(filemenu1,filemenu2,filemenu3); menubar.getMenus().addAll(FileMenu,EditMenu); primaryStage.setScene(scene); primaryStage.setTitle("TEST"); primaryStage.show(); } } ` > > thanks,I'll wait for the bug ------------- PR: https://git.openjdk.java.net/jfx/pull/795