私はシニアデザインプロジェクトのためにNetbeans 6.1でGUIを作成していますが、迷惑をかけてしまいました。私のログインポップアップのような一時的なWindowsおよび他の人は私がそれを言うとき消えません。私は約2ヶ月間この問題を解決する方法を研究してきました。私は私のポップアップのための別のスレッドを怒っているが、それはまだ働いていない....私は文字通り他のGUIコンポーネントのいずれかを混乱させなければ消える唯一の方法....私のサンプルコードは、怒りは...影のコードを気にしないでください。それは明らかにテストに役立ちませんでした。私のJFrameはなぜ隠れませんか?
//This method is called once a user presses the "first" login button on the main GUI
public synchronized void loginPopUpThread() {
doHelloWorld = new Thread(){
@Override
public synchronized void run()
{
try
{
loginPopUpFrame.pack();
loginPopUpFrame.setVisible(true);
System.out.println("waitin");
doHelloWorld.wait();
System.out.println("Not Sleepin..");
loginPopUpFrame.pack();
loginPopUpFrame.setVisible(false);
}
catch (InterruptedException e)
{
}
}
};
doHelloWorld.start();
//This is called when the "second" loginB is pressed and the password is correct...
public synchronized void notifyPopUp() {
synchronized(doHelloWorld) {
doHelloWorld.notifyAll();
System.out.println("Notified");
}
}
私はSwing Utilitiesも試してみましたが、初めて使ったので間違って実装したことがあります。それは本質的に、それは上記のコードのdoesntが行うどの、待機するようになったときに、ウィンドウを除き、上記のコードと同じことがフリーズします:
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public synchronized void run() {
try
{
loginPopUpFrame.pack();
loginPopUpFrame.setVisible(true);
System.out.println("waitin");
wait();
System.out.println("Not Sleepin.");
loginPopUpFrame.pack();
loginPopUpFrame.setVisible(false);
}
catch (InterruptedException e)
{
}
}
});
MEを助けてください!
私は皆さんが正しいと思います...私が望むのは、ウィンドウが表示され、ユーザーがリストから自分の名前を選択し、パスワードを入力し、パスワードが確認されるとただちにウィンドウが消えたかったということです。私の運をテストするために今フレームをダイアログに変えよう – durrellp
文書のスレッドセーフではない場合、それはそうではありません。実際、JDK7では、メソッドがスレッドセーフでないため、メソッドがスレッドセーフではない(およびできなかった)ため、いくつかのドキュメントが削除されています。 –