JDK-8123396 : Exception while rendering certain bengali characters/words in label
  • Type: Bug
  • Component: javafx
  • Sub-Component: graphics
  • Affected Version: 8
  • Priority: P4
  • Status: Resolved
  • Resolution: Duplicate
  • Submitted: 2013-08-26
  • Updated: 2015-06-17
  • Resolved: 2013-09-10
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 8
8Resolved
Related Reports
Duplicate :  
Description
The following word in Bengali font is throwing exception while rendering in Text Field

���������, ������������, ������������������������, ���������, ���������, ���������, ���������������������������������, ���������������������, ������������������, ������������ ������������������, ��������� ������������, ���������, ���������������, ���������������	��������� ������������ ( ������������������������ ) ������������ ��������������������� ��������� ��� 	��������������� ������������ ������������������ ������, ��������� ��������������������������� ��������� ��� 

Code

package banglatestfont;

import java.io.File;
import java.io.FileNotFoundException;
import java.net.MalformedURLException;
import java.util.Scanner;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class BanglaTestFont extends Application {

    @Override
    public void start(Stage primaryStage) throws MalformedURLException {
        //Text text = new Text();
        Label label = new Label();
        File file = new File("data.txt");
        StringBuffer sb = new StringBuffer();
        try {
            Scanner scanner = new Scanner(file,"UTF-8");
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                sb = sb.append(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        //text.setText(sb.toString());
        
        Font font = Font.loadFont(new File("bangla.ttf").toURL().toExternalForm(), 18);
        //text.setFont(font);
        //label.setWrapText(true);
        label.setStyle("-fx-wrap-text: true;-fx-font-size:18;");
        /*
         * Comment the following stylesheet assignement for 
         * displaying the characters properly 
         * JavaFx JIRA Issue -  RT-31074
         * 
         */
        //label.setStyle("-fx-font-size:18;");
        label.setFont(font);
        
        label.setText(sb.toString());
        StackPane root = new StackPane();
        //root.getChildren().add(text);
        root.getChildren().add(label);
        Scene scene = new Scene(root, 300, 250);
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Exception

Executing com.javafx.main.Main from D:\projects\BanglaFontTest\dist\run1552035427\BanglaFontTest.jar using platform C:\Program Files\Java\jdk1.8.0/bin/java
Exception in Application start method
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:491)
	at com.javafx.main.Main.launchApp(Main.java:642)
	at com.javafx.main.Main.main(Main.java:805)
Caused by: java.lang.RuntimeException: Exception in Application start method
	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:867)
	at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:56)
	at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:158)
	at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 8
	at com.sun.javafx.text.TextRun.getCharOffset(TextRun.java:538)
	at com.sun.javafx.text.TextRun.getWrapIndex(TextRun.java:274)
	at com.sun.javafx.text.PrismTextLayout.layout(PrismTextLayout.java:997)
	at com.sun.javafx.text.PrismTextLayout.ensureLayout(PrismTextLayout.java:199)
	at com.sun.javafx.text.PrismTextLayout.getBounds(PrismTextLayout.java:222)
	at javafx.scene.text.Text.getLogicalBounds(Text.java:388)
	at javafx.scene.text.Text.impl_computeLayoutBounds(Text.java:1159)
	at javafx.scene.Node$15.computeBounds(Node.java:3114)
	at javafx.scene.Node$LazyBoundsProperty.get(Node.java:8749)
	at javafx.scene.Node$LazyBoundsProperty.get(Node.java:8719)
	at javafx.scene.Node.getLayoutBounds(Node.java:3129)
	at com.sun.javafx.scene.control.skin.Utils.computeTextHeight(Utils.java:118)
	at com.sun.javafx.scene.control.skin.LabeledSkinBase.computePrefHeight(LabeledSkinBase.java:776)
	at javafx.scene.control.Control.computePrefHeight(Control.java:534)
	at javafx.scene.Parent.prefHeight(Parent.java:896)
	at javafx.scene.layout.Region.prefHeight(Region.java:1240)
	at com.sun.javafx.scene.control.skin.LabeledSkinBase.computeMaxHeight(LabeledSkinBase.java:799)
	at javafx.scene.control.Control.computeMaxHeight(Control.java:514)
	at javafx.scene.layout.Region.maxHeight(Region.java:1274)
	at javafx.scene.layout.Region.boundedNodeSizeWithBias(Region.java:1663)
	at javafx.scene.layout.Region.layoutInArea(Region.java:2035)
	at javafx.scene.layout.Region.layoutInArea(Region.java:1964)
	at javafx.scene.layout.Region.layoutInArea(Region.java:1905)
	at javafx.scene.layout.StackPane.layoutChildren(StackPane.java:366)
	at javafx.scene.Parent.layout(Parent.java:1032)
	at javafx.scene.Scene.layoutDirtyRoots(Scene.java:615)
	at javafx.scene.Scene.doLayoutPass(Scene.java:586)
	at javafx.scene.Scene.preferredSize(Scene.java:1623)
	at javafx.scene.Scene.impl_preferredSize(Scene.java:1650)
	at javafx.stage.Window$9.invalidated(Window.java:730)
	at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:109)
	at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:143)
	at javafx.stage.Window.setShowing(Window.java:796)
	at javafx.stage.Window.show(Window.java:811)
	at javafx.stage.Stage.show(Stage.java:243)
	at banglatestfont.BanglaTestFont.start(BanglaTestFont.java:54)
	at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:810)
	at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:273)
	at com.sun.javafx.application.PlatformImpl$5$1.run(PlatformImpl.java:239)
	at com.sun.javafx.application.PlatformImpl$5$1.run(PlatformImpl.java:236)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:236)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39)
	at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:101)
	... 1 more
Java Result: 1
Comments
I'm quite confident this is the same issue as RT-32705
10-09-2013

Works for me, is that the case the problem only happens when using "bangla.ttf" ?
28-08-2013

Ahh. I should have Googled the code name :)
27-08-2013

FX8 == Lombard
27-08-2013

Yes, I am testing in JDK8 itself, I was not sure what version to select while creating the issue so had to put something.
27-08-2013

Can you try this with FX 8? We do not support complex or Bi-Di text in FX 2.
27-08-2013