Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX: отчего Skin бывает null? / 2 сообщений из 2, страница 1 из 1
18.10.2015, 00:02
    #39079216
RuslanGab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: отчего Skin бывает null?
Прошу помощи - в пятницу полдня бился и так и не смог одолеть эту мистику...

Суть проблемы: кастомный элемент в JavaFX ИНОГДА выбрасывает исключения. Докопался до того, что исключения выпадают в результате того, что объект Skin (javafx.scene.control) у меня ноль. Документация немногословна:( Сей объект отвечает за рендеринг, порождается в единственном экземпляре конкретно для моего объекта и МОЖЕТ быть null. Собственно это все... Самое противное что он является у меня null в одном случае из 10, т.е. не то чтоб вообще все не работает, а иногда происходят сбои, понять природу которых мне не под силу, ибо условия выполнения идентичны вроде.

Следующие действия проведены:
1. Кастомный объект инициализируется внутри Platform.runLater, что по моему разумению выполняется после того как все элементы на сцене "стоят", дабы избежать как раз эксепшенов...
2. Думал что-то "не успевает" установиться - попробовал тупо slepp. Не помогло.
3. Завернул метод в отдельную нить и пускал ее через внутри Task (запуск осуществлял опять же внутри Platform.runLater) - по моим ощущениям null стал прилетать намного реже, но иногда таки есть. Причем попробовал в целом случайно - искренне не понимаю отчего тут могло бы стать лучше. Но как бы то ни было - проблема до конца не устранилась.
4. setDefaultSkin (ну или подобное - я пишу по памяти) не вариант - ошибка уходит но элемент не совсем верно отображается, что не допустимо.

Прошу помочь! Пните хоть где посмотреть, а то сижу думаю и ну просто уже не знаю что же еще попробовать... Может кто хоть знает отчего сей таинственный скин вообще может быть ноль и на каком этапе жизненного цикла графического элемента он устанавливается!?

Заранее большое спасибо.
...
Рейтинг: 0 / 0
20.10.2015, 11:46
    #39081050
RuslanGab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX: отчего Skin бывает null?
Посредством диких костылей проблему решил. Таки ставлю defaultSkin

Код: java
1.
2.
3.
4.
5.
6.
                    
Skin skin1 = grid.getSkin();
if (skin1 == null) {
    Skin<?> customSkin = grid.createDefaultSkin();
    grid.skinProperty().set(customSkin);
}



Неверное отображение моей таблицы осуществлялось при этом из-за того что высота строки с заголовками выставлялась 0. Далее cам меняю высоту для заголовков таблицы (отчего она становилась 0, учитыввая что забирается параметр из javafx.scene.layout.Region для меня тоже загадка):

Код: java
1.
2.
3.
4.
if (node instanceof TableHeaderRow) {
    TableHeaderRow tableHeaderRow = (TableHeaderRow) node;
    double defaultHeight = tableHeaderRow.getHeight() > 0 ? tableHeaderRow.getHeight(): ........
    tableHeaderRow.setPrefHeight(defaultHeight);




Одним словом все работает но я блин не врубаюсь отчего изначально рождается Skin==null и почему при выставлении нового скина вместо null дефолтная высота вдруг становится 0, так что решение далеко от оптимума, что удручает
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX: отчего Skin бывает null? / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]