GUIを持つ複雑なJavaプログラムを作成しました。プログラムは非常に遅く実行され、Thread.sleepは無視されます
GUIには、「再生」、「すべて再生」、「リセット」の3つのボタンといくつかの表があります。
私が再生をクリックすると、プログラムはロジックを実行し、出力を前述のテーブルに出力します。これは意図したとおりにうまく動作しています。一定量の「再生」操作の後、すべてのデータをテーブルに印刷したので、完了したので、これ以上クリックすることはできません。その時点で、私は再生ボタンを無効にします。
私はすべてをクリックすると、それはもはや可能になるまで "再生"をクリックしたようにしたい。だから私はこのコードを書いた:
public synchronized void actionPerformed(ActionEvent event)
{
if(event.getSource() == playAllButton)
{
while(playButton.isEnabled())
{
playButton.doClick();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
if(event.getSource() == playButton)
{
Command command = listOfCommands.get(commandNumber++);
if(command.getCommandType() == "PF")
{
PFLabel.setText("PF Count:" + (++PFCount));
}
if(command.getCommandType() == "PR")
{
PRLabel.setText("PR Count:" + (++PRCount));
}
if(command.getCommandType() == "GP")
{
if(checkIfPF())
{
addPageToRam(((GPCommand)command).getPage());
}
else
{
if(checkIfPR(((GPCommand)command).getPage().getPageId()))
{
replacePage(((GPCommand)command).getPage(),getWithWhoToReplace(((GPCommand)command).getPage().getPageId()));
}
}
}
}
if(commandNumber == listOfCommands.size()) // we are done!
{
playButton.setEnabled(false);
}
}
私が言及したように、私が再生ボタンをクリックすると、それは意図したとおりに結果をすぐに印刷します。 しかし、私がすべてをクリックすると、出力を表示せずに非常に長い時間実行され、最後に最終結果だけが表示されます。これは私が望むものではありません。私が欲しいのは、現在の結果を印刷して少し見て、それを見てから次の結果を印刷することです。
Thread.sleepを削除しても、非常に遅く(最後の結果しか表示されません)。
これを実行する方法はありますか?さらに重要なことは、ボタンをもう一度クリックする前に、どうすればいいのですか?私はそれが再びクリックされる前にしばらくの間、現在の結果を見たいと思う。
文字列を '=='と比較するのは普通ですか? 'command.getCommandType()==" PF "' – Tunaki
はい、それは正常で意図どおりの動作です。 –
私はそれを修正しても(私はそれを感謝します)、現在の問題をどのように助けますか? –