データベース内のデータ(株価&)がYahoo Financeのデータ(株価と価格)と一致すると、私のプログラムはユーザーに警告します。 HarryJoyの助けを借りて、私はポップアップ通知を実装することができます。すべてのフレームでDispose()が機能しません
問題は、すべての機能が最後のフレーム(YHOO)でのみ機能することです。 5秒後に、またはcloseButtonをクリックしても、()を破棄しません。ありがとう!
if (stockPriceDB == popStockValue)
{
String header = "Stock: " + stock.getTicker() + " is now @ " + stock.getPrice();
String message = "";
popUpFrame = new JFrame();
popUpFrame.setSize(320,90);
popUpFrame.setUndecorated(true);
popUpFrame.getContentPane().setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
constraints.weightx = 1.0f;
constraints.weighty = 1.0f;
constraints.insets = new Insets(5, 5, 5, 5);
constraints.fill = GridBagConstraints.BOTH;
JLabel headingLabel = new JLabel(header);
ImageIcon headingIcon = new ImageIcon("images/alert.gif");
headingLabel.setIcon(headingIcon);
popUpFrame.getContentPane().add(headingLabel, constraints);
constraints.gridx++;
constraints.weightx = 0f;
constraints.weighty = 0f;
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.NORTH;
closeButton = new JButton();
closeButton = new JButton(new AbstractAction("x")
{
private static final long serialVersionUID = 1L;
public void actionPerformed(final ActionEvent e)
{
popUpFrame.dispose();
}
});
closeButton.setMargin(new Insets(1, 4, 1, 4));
closeButton.setFocusable(false);
popUpFrame.getContentPane().add(closeButton, constraints);
constraints.gridx = 0;
constraints.gridy++;
constraints.weightx = 1.0f;
constraints.weighty = 1.0f;
constraints.insets = new Insets(5, 5, 5, 5);
constraints.fill = GridBagConstraints.BOTH;
JLabel messageLabel = new JLabel(message);
popUpFrame.getContentPane().add(messageLabel, constraints);
popUpFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
popUpFrame.setVisible(true);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Insets toolHeight = Toolkit.getDefaultToolkit().getScreenInsets(popUpFrame.getGraphicsConfiguration());
popUpFrame.setLocation(screenSize.width - popUpFrame.getWidth(), screenSize.height - toolHeight.bottom - (popUpFrame.getHeight() * (x+1)));
new Thread()
{
public void run()
{
try
{
Thread.sleep(5000);
popUpFrame.dispose();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
};
}.start();
}
}
ありがとうございました!私は変数をfinalに変更しましたが、今は正常に動作しています! :) –
popUpFrame.dispose(); EDTのputと呼ばれるので、invokeLaterにラップする必要があります。残りの部分は+1 – mKorbel
これを聞いて嬉しいです。私はそう考えました:)とにかく、あなたが目に見えるすべてのフレームを更新するためにただ1つのスレッドを使用していたとしたら、はるかに良いアプローチになります。こうすることで、フレームごとに個別のスレッドを作成することを避けることができます。更新スレッドは、見えるフレームのリストを有することができ、フレームは満了時間を有する可能性があり、満了したかどうかを確認するだけで30msごとにチェックし、それに応じて動作する。この方法では、常に2つのスレッドがあります。アニメーションなどのために、後でアップデートスレッドを再利用することもできます。 – Boro