У меня странная проблема ... Я относительно новый "энтузиаст" Java-программист (я зарабатывал себе на жизнь хакерством Perl в предыдущей карьере), работаю над своим первым полуреальным приложением.«Main-Class» - это класс MyApp
, который создает экземпляр UserInputDialog
.
UserInputDialog
- это класс, который я написал, extend
s JFrame
, реализующий ActionListener
и KeyListener
, использует FlowLayout
и предоставляет пользователю JLabel
, JTextField
и Cancel / OK JButton
s.Когда JTextField
генерирует KeyEvent
, где keyReleased() == KeyEvent.VK_ENTER
, или когда "OK" JButton
генерирует ActionEvent
, UserInputDialog
выполняет некоторую проверку ввода, вызывает setVisible(false)
, а затем вызывает MyApp.doSomething( JTextFieldInstance.getText() )
.
Всё работает отлично.Но теперь я пытаюсь добавить окно прогресса к MyApp
, так как doSomething()
может иногда занимать достаточно много времени для завершения.
Я создал класс ProgressWindow
, который расширяет JFrame
, использует BorderLayout
и отбрасывает JProgressBar
in. NORTH
и JScrollPane
(упаковка JTextArea
) in. CENTER
.ProgressWindow
отлично работает при создании экземпляра из ProgressWindowTester
и подачи тестовых данных.Это также работает нормально, если я копирую и вставляю тест для циклов из ProgressWindowTester
в MyApp
и не имею MyApp
экземпляр UserInputDialog
(т. Е. Нет ничего присущего в MyApp
это вызывает такое поведение; кажется, что это некое взаимодействие, которое я не понимаю, между UserInputDialog
и ProgressWindow
).
Но когда я пытаюсь использовать ProgressWindow
в MyApp
какнамеревался, т.е. ProgressWindow
setVisible (true), я получаю пустое окно Swing (правильного размера и с правильно заданной строкой заголовка).Компоненты JProgressBar
и JScrollPane / JTextArea
не отображаются.Методы ProgressWindow
вызываются MyApp
должным образом (сообщения System.err.println()
показывают правильное взаимодействие), все выглядит нормально, просто компоненты, которые должны быть видны в ProgressWindow
... не работают.
Я могу опубликовать фрагменты кода, но это немного запутанно, и я, вероятно, просто упускаю что-то очевидное ...
Я знаком с концепцией разделения пользовательского интерфейса и бизнес-логики в целом (Например, я использовал HTML::Template
и Class::DBI
и CGI::Application
при сборке приложений Perl), но я не уверен, что "делаю все правильно" в Java ...
Заранее спасибо!
О, у меня одинаковое поведение в двух средах, в которых я пробовал код: javac 1.6.0_29 в Mac OS X 10.6.8 («Snow Leopard»);и javac 1.7.0_02 [1] в дистрибутиве Fedora 15 Linux, ядро 2.6.31.10-3, среда рабочего стола LXDE.
[1] Скачано непосредственно с oracle.com;Я не использую OpenJDK (я знаю, что JDK 7 основан на OpenJDK) или gcj или что-то в этом роде