0

現在、私は 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;
                }
            };
4

1 に答える 1