| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: GUI и Java FX приложения > awt или swing |
| Автор: elnino 3.1.2005, 01:04 | ||
Создается JWindow, на который я хочу добавить лэйбл:
Этот код не работает. Проблема в том, что окно выводится, а вот метка -- нет. Если изменить тип loadingStatusLabel на Label, то метка отобразится, но при этом я не могу использовать возможности swing. Что делать? Спасибо. |
| Автор: Domestic Cat 3.1.2005, 02:44 | ||
| У меня все показывает. Попробуй заменить этот код на эквивалентный, но более простой:
Если все будет так же, будем смотреть. |
| Автор: Domestic Cat 3.1.2005, 02:54 | ||
|
| Автор: igon 3.1.2005, 11:44 | ||||||||
Из доки на JWindow:
Хм, а у меня оригинальный код даже не компилится После задействования contentPane - все заработало
|
| Автор: Domestic Cat 3.1.2005, 17:03 | ||||
На самом деле ругаться будет 1.4.х, хотя все скомпилится, но не запустится; 1.5 отсутствие контентпейн прощает, т.к. add перегружен:
|
| Автор: igon 3.1.2005, 19:59 |
| Надо бы рекомендовать вопрошающим указывать версию JDK. И переходить на 1.5 |
| Автор: elnino 5.1.2005, 00:12 |
| Спасибо, что обратили внимание на мой вопрос. Все равно не работает, и дело здесь, насколько я понял, не в этом коде. Все советы igon справедливы, а альтернативный код Domestic Cat не менее работоспособен, чем приведенный мной в самом начале. Но это касается тех случаев, когда этот код запускается в отдельном классе примитивного проекта. Здесь все несколько сложнее, может быть причина в этом? То есть окно loadingMonitor создается вместе с loadingStatusLabel, после чего моя программа начинает активные действия как, например, загрузка иконок и курсоров, установка сетевых соединений и передача данных через сокеты по сети. Может ли статься такое, что ресурсов моего компа не хватает, для того чтобы нормально перерисовывать loadingMonitor? Понимаю, звучит глупо, но если специально сделать так, чтобы в процессе загрузки основной программы (то есть как раз в то время, когда я наблюдаю на экране ПУСТОЙ loadingMonitor) вылетел Exception, то в loadingMonitor моментально появляется loadingStatusLabel с текстом, соответствующим состоянию загрузки программы на момент вылета этого самого Exception... P.S. Версия java, которой я пользуюсь jdk-1_5_0_01-windows-i586-p.exe P.P.S. Celeron 333MHz, 196 оперативки <= мой зверь |
| Автор: Domestic Cat 5.1.2005, 00:20 | ||
| Вопрос в том, где ты в программе пытаешься показать это окно. Перенеси его в main - что будет? Если этот код находится в методе листенера (типа actionPerformed), добавь
|
| Автор: elnino 5.1.2005, 01:44 |
| Финиш! Перепробовал все, что знал. Включая invokeLater(). Уж куда только я его не вставлял... Вопрос остался открытым: чем отличается, к примеру, JLabel от Label, таким, что при всех описанных выше действиях Label видно всегда и без проблем, а JLabel - только при возникновении исключительной ситуации? Domestic Cat, ты права: этот злополучный код выполняется в actionListener() кнопки. Вне его, как ты понимаешь, проблем с окном "loadingMonitor" не возникает. P.S. Кстати, при использовании invokeLater() не видно даже окна (до исключения) |
| Автор: Domestic Cat 5.1.2005, 01:50 | ||||
Гыыы я пока пол не менял Возьми весь код, не относящийся к окну, и помести его в отдельный тред:
а код с окном оставь в invokeLater. Ну и смотри - будет появляться или нет. |
| Автор: elnino 5.1.2005, 20:44 | ||
| 2 Domestic Cat: уупс, гранд сори Есть предложение: для демонстрации всего вышесказанного, взять вот этот код:
...и потестить его у себя. У кого какие комментарии? Скажу сразу, что происходит у меня: Label видно сразу вместе с окном, а JLabel не появляется до тех пор, пока цикл не закончит свою работу. Если же раскомментировать строки с "invokeLater()", то до окончания работы цикла не появляется даже окно... У вас так же или это у меня глюк? Не поленитесь, пожалуйста P.S. Сори за неудобочитаемость кода, не хотел занимать слишком много места |
| Автор: Domestic Cat 5.1.2005, 21:22 | ||
Я ж говoрил - сделай так:
У тебя тред диспетчерa вынужден считать косинусы вместo тогo чтобы лабел рисовать. Добавлено @ 21:24 Насчет лейблов - у меня рисуются оба (с учетом моего кода). |