現在、私は WorldWind を含むプロジェクトに完全に行き詰まっていますが、SwingWorker とスイング タイマー クラスに関する一般的な問題です。
基本的に、LatLon 座標を持つ地球上に形状があり、設定された時間ごとに、LatLon の所定のベクトルに沿って移動しようとしています。実際のタイマー イベントを除いて、すべてが機能するはずです。標準のタイマーから System.getCurrentTimeMill() を呼び出してそれをインクリメントするまで、複数のものを使用しようとしましたが、どれも機能しませんでした。
今、「アニメーション」ボタンを押すと、次の関数が呼び出されます。
private void animate(LatLon pos) throws InvocationTargetException, InterruptedException {
// TODO Auto-generated method stub
if(SwingUtilities.isEventDispatchThread())
{
timer = new Timer(speed, this);
timer.setInitialDelay(pause);
timer.setRepeats(false);
while (count < 5)
{
timer.start();
CircleWorker.execute();
sphere.setLocation(pos);
count ++;
}
}
else{
SwingUtilities.invokeAndWait(new Runnable()
{
@Override
public void run(){
int count = 0;
//timer = new Timer(speed, this);
timer.setInitialDelay(pause);
while (count < 30)
{
timer.start();
CircleWorker.execute();
count ++;
checker2();
}
}});
ここに私のSwingWorkerがあります:
SwingWorker<LatLon, Void> CircleWorker = new SwingWorker<LatLon, Void>()
{
@Override
protected LatLon doInBackground()
{
//checker();
double lat = changeAm.getLatitude().getDegrees() + currentPos.getLatitude().getDegrees();
double lon = changeAm.getLongitude().getDegrees() + currentPos.getLongitude().getDegrees();
// sets lat lon to the amounts in each individual amount
currentPos = LatLon.fromDegrees(lat, lon);
counter ++;
//checker2();
return currentPos;
}
@Override
public void done()
{
//checker3();
currentPos = ATLANTA;
}
};