私は途方に暮れています、スイングワーカーの簡単な使い方。doInBackground() に簡単なコードをいくつか追加しましたが、実行されず、例外も発生しません。デバッガを使用すると、彼は正常に動作しています。)) 誰かがこのようなものを持っているか、この間違いをキャッシュする方法を教えてください...申し訳ありませんが、コードは複雑です。もっと何かが必要か、コメントを教えてください。「installer.setFPS(fPSCalculatorGhost.getFPS());」文字列を削除すると、すべて問題ありません。
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MainWindow().setVisible(true);
}
});
public MainWindow() {
initComponents();
}
private void initComponents() {
InterfaceUpdateWorker interfaceUpdate = new InterfaceUpdateWorker(
new InterfaceInfoInstallerImpl());
interfaceUpdate.setCamera(gLEventListenerImpl.getCameraGhost());
interfaceUpdate.setfPSCalculatorGhost(gLEventListenerImpl.getFPSCalculatorGhost());
interfaceUpdate.execute();
}
@Override
protected Void doInBackground() throws InterruptedException {
while(true) {
installer.setFPS(fPSCalculatorGhost.getFPS());
installer.setCameraXPosition(
cameraGhost.getCameraXPosition());
installer.setCameraYPosition(
cameraGhost.getCameraYPosition());
installer.setCameraZPosition(
cameraGhost.getCameraZPosition());
Thread.sleep(200);
}
}
public final class FPSCalculatorGhost {
private FPSCalculatorGhost() {
}
public float getFPS() {
return fpsTask.getAvrfps();
}
}
public float getAvrfps() {
synchronized (this) {
return avrfps;
}
}
すべてが fpsTask-object を中心に展開します。これは、interfaceUpdate-thread (またはアプリケーション ワーカー スレッド) によって使用され、他のスレッドによって使用され、そこで初期化されます。結果: 1)。fpsTask-object は 1 つのスレッドで初期化されます 2)。fpsTask-object は別のスレッドに値を渡します。
FPSCalculatorGhost final から fpsTask を作成すると、動作し始めます。