JDialog не рисует

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

На моем компьютере, если я запускаю программу из NetBeans или из командной строки, диалоговое окно отображается правильно. Если я запускаю программу на компьютере, на котором она должна работать, внутренняя часть диалогового окна не окрашивается - все, что я вижу, это граница диалогового окна, а затем экран за ним, где должны быть элементы управления. Этот компьютер работает под управлением XPSP2 и jre6 update 11.

Кто-нибудь знает, что может пойти не так?

TIA

На каком компьютере работает ваш (ОС и JRE)?

Phil 05.01.2009 03:23

Я предлагаю получить трассировку стека с помощью ctrl-break на консоли (ctrl- \ в Linux / Solaris) или с помощью jstack или jconsole.

Tom Hawtin - tackline 05.01.2009 16:17
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
1 650
4

Ответы 4

Вы делаете всю свою работу, связанную с Swing, в Поток отправки событий? Если да, то уверены ли вы, что не блокируете этот поток или что-то в нем делаете медленно?

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

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

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

Команда будет такой: java -jar pathtoyourjar.jar

Код работает в одном месте, но не работает в другом. Компьютеры не волшебство. Так что между двумя компьютерами должна быть какая-то разница. Это код графического интерфейса Swing. Три наиболее вероятных отличия:

  • Различное видеооборудование
  • Другой код (возможно, библиотеки JRE)
  • Другой вид и ощущение Swing (вероятно, вызвано разными ОС)

Если что-то в соединении Java с видеооборудованием на двух машинах отличается, попробуйте выяснить, что именно. На вашем компьютере и на целевой машине установлены последние версии видеодрайверов и т. д.? Имеет ли целевая машина два монитора или какое-то другое различие в видеооборудовании, которое может привести к выполнению другого кода?

Различия между двумя компьютерами, например, JRE или ОС, могут привести к выполнению разного кода. Вы сообщили нам JRE и ОС для целевой машины: что насчет вашей машины? Можете ли вы найти третью машину или установить другую JRE, чтобы мы знали, машина это или JRE?

У вас могут быть разные стили Swing Look и Feel на двух машинах. Попробуйте по-другому взглянуть и почувствовать.

UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

Просто упомяну, что проблема, вероятно, связана с вашим кодом, и ошибка, скорее всего, связана с вашим кодом, чем в библиотеках Swing, но это, по крайней мере, может помочь вам понять, почему все работает на одной машине, а не на другой.

Другие вопросы по теме