Buggy code:
protected void refresh ( ) { } @ Override public void refreshItemProperty ( String itemName , EJManagedScreenProperty managedItemPropertyType , EJDataRecord record ) { } protected void expandLevel ( int level , TreeItem < EJDataRecord > parent ) { } @ Override public void refreshItemRendererProperty ( String arg0 , String arg1 ) { } @ Override public void synchronize ( ) { } @ Override public Object getGuiComponent ( ) { } @ Override public Node createComponent ( ) { } void addColumns ( List < EJFXTreeTableRecordBlockRenderer . TreeNodeTextProvider > columns , EJItemGroupProperties groupProperties ) { } static class TreeNodeTextProvider { @ SuppressWarnings ( "rawtypes" ) private final TableColumn provider ; public TreeNodeTextProvider ( TableColumn < EJDataRecord , ? > provider ) { } public String getText ( EJDataRecord object ) { } } EJFXTreeTableRecordBlockRenderer . TreeNodeTextProvider createScreenItem ( EJCoreMainScreenItemProperties itemProps ) { if ( itemProps . isSpacerItem ( ) ) { return null ; } EJScreenItemController item = _block . getScreenItem ( MAIN , itemProps . getReferencedItemName ( ) ) ; EJManagedItemRendererWrapper renderer = item . getManagedItemRenderer ( ) ; if ( renderer != null ) { EJFrameworkExtensionProperties blockProperties = itemProps . getBlockRendererRequiredProperties ( ) ; EJFXAppItemRenderer itemRenderer = ( ( EJFXAppItemRenderer ) ( renderer . getUnmanagedRenderer ( ) ) ) ; final TableColumn < EJDataRecord , EJDataRecord > labelProvider = itemRenderer . createColumnProvider ( itemProps , item ) ; if ( labelProvider != null ) { TreeTableColumn < EJDataRecord , EJDataRecord > tableCol = new TreeTableColumn ( labelProvider . getText ( ) ) ; _tableViewer . getColumns ( ) . add ( tableCol ) ; tableCol . setUserData ( labelProvider ) ; String labelOrientation = blockProperties . getStringProperty ( COLUMN_ALIGNMENT ) ; if ( labelOrientation != null ) switch ( labelOrientation ) { case EJFXMultiRecordBlockDefinitionProperties . COLUMN_ALLIGN_LEFT : tableCol . getStyleClass ( ) . add ( "ej-column-header-left" ) ; break ; case EJFXMultiRecordBlockDefinitionProperties . COLUMN_ALLIGN_RIGHT : tableCol . getStyleClass ( ) . add ( "ej-column-header-right" ) ; break ; case EJFXMultiRecordBlockDefinitionProperties . COLUMN_ALLIGN_CENTER : tableCol . getStyleClass ( ) . add ( "ej-column-header-center" ) ; break ; default : break ; } int displayedWidth = blockProperties . getIntProperty ( DISPLAY_WIDTH_PROPERTY , 0 ) ; if ( displayedWidth == 0 ) { if ( ( itemProps . getLabel ( ) ) != null ) displayedWidth = ( itemProps . getLabel ( ) . length ( ) ) + 2 ; else displayedWidth = 5 ; } String visualAttribute = blockProperties . getStringProperty ( VISUAL_ATTRIBUTE_PROPERTY ) ; if ( visualAttribute != null ) { EJCoreVisualAttributeProperties va = EJCoreProperties . getInstance ( ) . getVisualAttributesContainer ( ) . getVisualAttributeProperties ( visualAttribute ) ; if ( va != null ) itemRenderer . setInitialVisualAttribute ( va ) ; } tableCol . setCellFactory ( new Callback < TreeTableColumn < EJDataRecord , EJDataRecord > , TreeTableCell < EJDataRecord , EJDataRecord > > ( ) { @ Override public TreeTableCell < EJDataRecord , EJDataRecord > call ( TreeTableColumn < EJDataRecord , EJDataRecord > p ) { Callback < TableColumn < EJDataRecord , EJDataRecord > , TableCell < EJDataRecord , EJDataRecord > > cellFactory = labelProvider . getCellFactory ( ) ; @ SuppressWarnings ( "unchecked" ) final TableCell < EJDataRecord , EJDataRecord > cell = cellFactory . call ( labelProvider ) ; TreeTableCell < EJDataRecord , EJDataRecord > treeTableCell = new TreeTableCell < EJDataRecord , EJDataRecord > ( ) { @ Override protected void updateItem ( EJDataRecord arg0 , boolean arg1 ) { if ( cell instanceof VACell ) { VACell vacCell = ( ( VACell ) ( cell ) ) ; vacCell . updateItem ( arg0 , arg1 ) ; setText ( vacCell . getText ( ) ) ; setGraphic ( vacCell . getGraphic ( ) ) ; getStyleClass ( ) . clear ( ) ; getStyleClass ( ) . addAll ( vacCell . getStyleClass ( ) ) ; } else { super . updateItem ( arg0 , arg1 ) ; } } } ; return treeTableCell ; } } ) ; tableCol . setCellValueFactory ( new Callback < TreeTableColumn . CellDataFeatures < EJDataRecord , EJDataRecord > , ObservableValue < EJDataRecord > > ( ) { @ Override public ObservableValue < EJDataRecord > call ( final TreeTableColumn . CellDataFeatures < EJDataRecord , EJDataRecord > p ) { return new ObservableValue < EJDataRecord > ( ) { @ Override public void removeListener ( InvalidationListener arg0 ) { } @ Override public void addListener ( InvalidationListener arg0 ) { } @ Override public void removeListener ( ChangeListener < ? super EJDataRecord > arg0 ) { } @ Override public EJDataRecord getValue ( ) { return p . getValue ( ) . getValue ( ) ; } @ Override public void addListener ( ChangeListener < ? super EJDataRecord > arg0 ) { } } ; } } ) ; tableCol . setId ( itemProps . getReferencedItemName ( ) ) ; tableCol . setText ( itemProps . getLabel ( ) ) ; tableCol . setResizable ( blockProperties . getBooleanProperty ( ALLOW_COLUMN_RESIZE , true ) ) ; tableCol . setSortable ( blockProperties . getBooleanProperty ( ALLOW_ROW_SORTING , true ) ) ; if ( blockProperties . getBooleanProperty ( ALLOW_ROW_SORTING , true ) ) { Comparator < EJDataRecord > columnSorter = itemRenderer . getColumnSorter ( itemProps , item ) ; if ( columnSorter != null ) tableCol . setComparator ( columnSorter ) ; } final Text text = new Text ( "A" ) ; text . snapshot ( null , null ) ; <START_BUG> double avgCharWidth = ( text . getLayoutBounds ( ) . getWidth ( ) ) + 5 ; <END_BUG> if ( avgCharWidth > 0 ) { tableCol . setPrefWidth ( ( ( int ) ( ( displayedWidth + 1 ) * avgCharWidth ) ) ) ; } return new EJFXTreeTableRecordBlockRenderer . TreeNodeTextProvider ( labelProvider ) ; } } return null ; } private Node createGridData ( EJMainScreenProperties layoutItem , Node node ) { } void setInputs ( ) { } void setInputsKeepExpand ( ) { } }

Fix:
double avgCharWidth = text . getLayoutBounds ( ) . getWidth ( ) ;