J'ai un problème étrange ... Je suis un programmeur Java "enthousiaste" relativement nouveau (j'avais l'habitude de gagner ma vie en hacker Perl, dans une carrière précédente), travaillant sur mon premier semestre. application réelle. "Main-Class" est la classe MyApp
, qui crée une instance UserInputDialog
.Java: la deuxième fenêtre est vide
UserInputDialog
est une classe que j'ai écrit que extend
s JFrame
, met en œuvre et ActionListener
KeyListener
, utilise FlowLayout
, et présente à l'utilisateur une JLabel
, JTextField
et Annuler/OK JButton
s. Lorsque le JTextField
génère un KeyEvent
où keyReleased() == KeyEvent.VK_ENTER
, ou lorsque le "OK" JButton
génère un ActionEvent
, UserInputDialog
effectue une validation d'entrée, appelle setVisible(false)
, puis appelle MyApp.doSomething(JTextFieldInstance.getText())
.
Tout cela fonctionne parfaitement. Mais maintenant j'essaie d'ajouter une fenêtre de progression à MyApp
, car doSomething()
peut parfois prendre un certain temps à compléter.
J'ai créé la classe ProgressWindow
, qui étend JFrame
, utilise BorderLayout
et jette un JProgressBar
dans. NORTH
et un JScrollPane
(enveloppant un JTextArea
) dans. . ProgressWindow
fonctionne parfaitement lorsqu'il est instancié à partir de ProgressWindowTester
et alimenté des données de test. Il fonctionne aussi bien si je copier-coller le test pour les boucles de ProgressWindowTester
en MyApp
et ne pas MyApp
instancier UserInputDialog
(il n'y a rien inhérent à MyApp
qui est à l'origine de ce comportement, il semble être une sorte d'interaction Je ne comprends pas, entre UserInputDialog
et ProgressWindow
).
Mais quand je tente d'utiliser ProgressWindow
dans MyApp
comme prévu, à savoir, ProgressWindow
setVisible (vrai), je reçois une fenêtre Swing blanc (de la bonne taille, et la barre de titre correctement défini). Les composants JProgressBar
et JScrollPane/JTextArea
n'apparaissent pas. Les méthodes ProgressWindow
sont appelées par MyApp
correctement (System.err.println()
messages montrent une interaction correcte), tout semble bien fonctionner, juste, les composants qui devraient être visibles dans ProgressWindow
... ne le sont pas.
Je peux poster des extraits de code, mais il est un peu alambiquée, et je suis probablement manquer quelque chose d'évident ...
Je suis familier avec le concept de la séparation logique de l'interface utilisateur et les affaires en général (par exemple, je utilisé HTML::Template
et Class::DBI
et CGI::Application
lors de la construction des applications Perl), mais je ne suis pas sûr que je suis « faire droit » en Java ...
Merci à l'avance! Oh, j'ai exactement le même comportement sur les deux environnements dans lesquels j'ai essayé le code: javac 1.6.0_29 sur Mac OS X 10.6.8 ("Snow Leopard"); et javac 1.7.0_02 [1] sur la distribution Fedora 15 Linux, noyau 2.6.31.10-3, environnement de bureau LXDE.
[1] Téléchargé directement depuis oracle.com; Je n'utilise pas OpenJDK (je sais que JDK 7 est basé sur OpenJDK) ou gcj ou quoi que ce soit
Difficile à dire sans code, mais pourrait être un problème de thread Swing, surtout si la tâche de longue durée est effectuée sur le thread Swing: http://java.sun.com/products/jfc/tsc/articles /threads/threads1.html – DNA