私は非常に簡単な問題を解決しようとしています。私はフレームと毎回このフレームを準備する別のスレッド(FrameThread)を描画するメインスレッドを持っています。両方のスレッドが同じMyFrameオブジェクトを共有する必要があります。メインスレッドからFrameThreadを制御したい、つまり:MyFrameは準備ができている - >メインスレッドに描画する - > FrameThreadを実行し続ける。現在、私は次のようでした。その後オブジェクトを共有し、スレッドの実行をメインスレッドから制御する
private class FrameEngine
{
private boolean isFrameReady = false;
private MyFrame frame;
public synchronized void generateFrame()
{
while(isFrameReady)
wait();
frame = FrameGenerator.nextFrame();
isFrameReady = true;
notifyAll();
}
public synchronized MyFrame getFrame()
{
while(!isFrameReady)
wait();
isFrameReady = false;
notifyAll();
return frame;
}
}
を私はFrameThread作成:
private class FrameThread implements Runnable
{
private final FrameEngine frame_eng;
public FrameThread(FrameEngine engine)
{
frame_eng = engine;
}
@Override
public void run()
{
while(true)
frame_eng.generateFrame();
}
}
そして最後に、メインスレッド:
FrameEngine frame_engine = new FrameEngine();
Thread frameThread = new Thread(new FrameThread(frame_engine));
frameThread.start();
...
while(true)
{
...
drawFrame(frame_engine.getFrame());
...
}
だから私の目標は次のとおりです。FrameThreadはバックグラウンドで実行された直後に停止しますフレームが準備完了です。私はJavaで非常に初心者ですが、私はそれを達成するためにはるかに安全な方法があると感じています。あなたは私にそれについて助言を与えることができますか?ありがとうございました。
@HovercraftFullOfEelsあなたは正しいです。 – Juvanis
@Kael:あなたのコードは私にとって珍しいようですが、私はスレッドの専門家ではありません。どのような方法であなたのプログラムはGUIですか?これはjava.awt.Frameですか?もしそうなら、Swingとjavax.swing.JFramesを使用してみませんか? GUIがSwingWorkersの使用を検討する場合。そしてまもなくまともな回答が得られない場合は、できるだけ詳細を提供することを検討してください。 –
@Hovercraft Eelsの完全:私はそれを名前を変更する必要がありますと思います。これは単なる純粋なJavaであり、追加のフレームワークはありません。 – Kael