LINUX.ORG.RU
ФорумTalks

[ЖЖ]За что я так люблю жаву.

 


0

0

За это: http://img134.imageshack.us/img134/570/bugrec.png

После первого брейкпоинта (красная линия) yChildren инициализирован, а на втором он уже null, и вылетает соотв. исключение. В чем фокус? А фокус в том что в строке

Dimension typ = c.getPrefferedSize()

Внезапно происходит invalidate контейнера с обнулением "yChildren" (стек вызовов справа). Феерия! Попробуйте догадаться из-за чего метод который якобы должен всего навсего получать размер компонента на самом дее изменяет состояние не только компонента но и его родителя, что сильно логично 8) и ожидаемо [тут матюги].

★★☆

Напиши свой метод получения размера компонента.
Или это и есть твой собственный класс, и ты написал этот чудо-метод?

Terrens
()
Ответ на: комментарий от Terrens

Ты один из тех кто думает что ява это мотоцикл? Разочарую, ява это еще и остров где делают эти мотоциклы.

wfrr ★★☆
() автор топика


форматирование у тебя, конечно, хромает факт. три раза пытался понять, кто кого имеет - так сразу не понял. явно фолт :-/

anyway. долго читал, пытался думать. пардон мой чайниковски вопрос, но xChildren будучи созданным на куче - как его можно изменить а тем более локальную переменную обнулить через внешний вызов типа getPreferredSize() ? ссылки на локальную переменную xChildren вызов не имеет -> как он её вообще может изменить? хорошо, я смотрю с точки зрения C++. благо, код оч похож. видимо, свои какие-то особенности. но с точки зрения почти-такого-же выглядит, конечно, странновато. или я чего-то не понял.

ps: c++ и java - это как Россия и Украина. вроде как бы и похожи, ан нет.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от wfrr

Я один из тех, кто думает, что если программист сталкивается с проблемами при написании программы, то эти проблемы зависят исключительно от самого программиста.

Terrens
()
Ответ на: комментарий от wfrr

> Ты один из тех кто думает что ява это мотоцикл? Разочарую, ява это еще и остров где делают эти мотоциклы.

ну а я в свою очередь вынужден разочаровать уже тебя: на острове Ява не делают мотоциклов 'Ява' :)

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

Это исходник из JDK, форматирование съехало из-за того что у меня tab= 2 пробела

>пардон мой чайниковски вопрос, но xChildren будучи созданным на куче - как его можно изменить а тем более локальную переменную обнулить


Это перменная-член класса, обнуляется она в методе invalidateLayout() - вершина стека вызовов справа.

wfrr ★★☆
() автор топика
Ответ на: комментарий от Terrens

Нет, ты один из тех, кто найдя ошибку в системной библиотеке будет писать свою реализацию этой библиотеки. Обычно такой народ как ты сидит на делфях, отчегото и создает гемморой админам.

Верный путь это разобраться от чего так происходит, и отправить багрепорт если это ошибка JDK.

wfrr ★★☆
() автор топика
Ответ на: комментарий от wfrr

> Это перменная-член класса, обнуляется она в методе invalidateLayout() - вершина стека вызовов справа.

ну ребята! это не java. индусы'c. я тебе такое и на С++ напишу. и на ruby. и ещё хрен знает на чём. не, чувак, это не показатель кривости языка. максимум - конкретная реализация чего-то там конкретными руками.

я понимаю глас вопиющего в пустыне. но это не вина пустыни.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

>ps: c++ и java - это как Россия и Украина. вроде как бы и похожи, ан нет.

ну говори до конца - who is who???

ps. белко, форматирование ни в жопу. зачем ты так пишешь?

k0l0b0k ★★
()
Ответ на: комментарий от wfrr

> Верный путь это разобраться от чего так происходит, и отправить багрепорт если это ошибка JDK.

...и ждать ещё с годи, когда выйдет очередной релиз с фиксом и ещё годик, когда он, дай то бог, разойдётся по юзерам. итого: два годика сосём лапку. или не лапку. но сосём.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

Ну так я ву я не виню, это претензия конкретно к человеку написавшему класс GroupLayout ( даже конкретный метод getComponentInfo ), но увы я не могу однозначно утверждать является ли это багом, а попинать разрабов не могу в силу того что мой английский они не поймут 8)

Во всяком случае косяк был обойден без костылей, но потрачено время на его поиск. И на очереди разбиратсья с этим индусокодом https://glassfish.dev.java.net/issues/show_bug.cgi?id=8569 ибо сия функция нужна, а когда они починять неведомо.

wfrr ★★☆
() автор топика
Ответ на: комментарий от wfrr

> Патч то можно наклепать самом и ткнуть носом разрабов.самом

ну а толку то с того? релиз цикл ты от этого не поменяешь... и не их то вина. и не твоя. но прыгать то надо. что делать - уже отдельный вопрос.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

Ну так вопрос в том как надо поступать, не писать же "свой метод получения размера компонента" как тут многие советуют, в принципе можно пользоваться патченной версией или костылями в зависимости от ситуации пока не выйдет исправление.

wfrr ★★☆
() автор топика
Ответ на: комментарий от wfrr

>попинать разрабов не могу в силу того что мой английский они не поймут

Дурацкое предубеждение. Всё они поймут, ты же не анализ шекспировской "Бури" в контексте фильма Питера Гринуэя будешь обсуждать.

не совсем по этому поводу, но тоже подходит: http://www.xkcd.com/451/ ;)

volh ★★
()
Ответ на: комментарий от wfrr

> Ну так вопрос в том как надо поступать, не писать же "свой метод получения размера компонента" как тут многие советуют, в принципе можно пользоваться патченной версией или костылями в зависимости от ситуации пока не выйдет исправление.

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

// wbr

klalafuda ★☆☆
()

кстати, а как в яве с манкипатчингом? все ли классы открыты, принято ли использовать, дурной или хороший тон?..

volh ★★
()
Ответ на: комментарий от klalafuda

это Дао, чювак, в нем не надо ничего находить ^_^

volh ★★
()
Ответ на: комментарий от dimon555

А ещё многие любят потроллить вечерком :}

Deleted
()
Ответ на: комментарий от volh

Тут косяк в том что еслиб это был банальный косяк то все было бы легко объяснимо, но
//вот собстно проблемный код
private ComponentInfo getComponentInfo(Component JavaDoc component) {
  ComponentInfo info = (ComponentInfo)componentInfos.get(component);
    if (info == null) {
      info = new ComponentInfo(component);
      componentInfos.put(component, info);
      if (component.getParent() != host) {//это условие будет true только если компонет не принадлежит текущему контейнеру, что есть ошибка (ИМХО) 
        host.add(component); // следовательно тут нужно кидать исключение
      }
    }
  return info;
}

А исключение не кидается, вместо этого компонент "незаметно" перемещается в текущий контейнер, и если бы в моей программе вложенность layout`овы была другая или вместо BoxLayout был бы бдругой то эта бы ошибка (что компонент добавляет не в тот контейнер которому принадлежит layout) и не былабы обнаружена, ибо вышеприведенный код ее маскирует. Вот как это объяснить на англйиском, если даже на русском мало кто поймет.

wfrr ★★☆
() автор топика
Ответ на: комментарий от wfrr

> А исключение не кидается, вместо этого компонент "незаметно" перемещается в текущий контейнер, и если бы в моей программе вложенность layout`овы была другая или вместо BoxLayout был бы бдругой то эта бы ошибка (что компонент добавляет не в тот контейнер которому принадлежит layout) и не былабы обнаружена, ибо вышеприведенный код ее маскирует. Вот как это объяснить на англйиском, если даже на русском мало кто поймет.

тебе, наверное, в конфу по jdk. моя твоя не понимай.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

>ps: c++ и java - это как Россия и Украина

java и c++. Империяльный фикс.

FiXer ★★☆☆☆
()

Вот что бывает, когда нарушают инкапсуляцию и пишут на ООП-языке в процедурном стиле.

Да, кстати, на .NET со "свойствами" и не такие чудеса случаются. ;)

iZEN ★★★★★
()
Ответ на: комментарий от wfrr

> Разочарую, ява это еще и остров где делают эти мотоциклы.

Больше шуток, несвежих и разных

melkor217 ★★★★★
()
Ответ на: комментарий от wfrr

>Вот как это объяснить на англйиском, если даже на русском мало кто поймет.

А ты попробуй. Более того swing и вообще бОльшая часть джавы (как платформы) делается в россии.Так что можешь обратиться в питерский RD офис и спокойно переговорить на русском с разработчиками.

ЗЫ На последней конференции выступал лед. девелопер UI netbeans - вполне российский дядька :)

vyv ★★★
()

Сколько не смотрю исходники на Яве, понимаю, что ее приход лоббировали производители клавиатур... и жестких дисков. Надо же настолько многословно, витиевато и непонятно получается написать программу.

annoynimous ★★★★★
()
Ответ на: комментарий от wfrr

>Это вам не перл где немногословность с лихвой компенсируется остальным.

"Это вам не перл где немногословность с лихвой компенсируется ОДНОРАЗОВОСТЬЮ."

fixed.

iZEN ★★★★★
()
Ответ на: комментарий от annoynimous

>Сколько не смотрю исходники на Яве, понимаю, что ее приход лоббировали производители клавиатур... и жестких дисков.

Java и ZFS как бы одного поля ягоды.
С ZFS, кстати, Eclipse стартует весьма необычно: сначала на запуске задумывается секунд на двадцать-тридцать, а потом "хлоп" — всё открывается и работает как будто из RAM-диска.

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

ты на солярисе сидишь или на бсд?

wfrr ★★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.