0

メソッドが終了した後ではなく、 のアクティブ化後にしばらくの間呼び出されることがわかりましたpaint()(すぐには起こりませんよね?) init()init()メソッドで作成および描画されるオブジェクトがいくつかありますpaint()。ただし、オブジェクトが初期化される前に描画が開始されます。これにより、自動的に処理される例外が発生します。しかし、オブジェクトが の最初のアクティブ化後に描画されない原因にもなります。オブジェクトpaint()を表示するには、再描画する必要があります。

paint()メソッドの最初に配置された無限サイクルでメソッドの作業をブロックすることができました。これは、作業が終了するまで停止しません(別のスレッドで実行するinit()と思います)。しかし、雇用されている Java プログラマーは、これはエレガントな解決策ではないと私に言いました。問題、それが私がここで尋ねている理由です)。init()paint()

作業が完了paint()する前にメソッドがアクティブにならないようにするにはどうすればよいですか? また、エレガントな方法でメソッドを作成するにはどうすればよいですか (この場合、それが何を意味するのか...)?init()

編集:

私は Dr. Java を使用しています。何らかの理由で、2 つの異なるコンピューターでアプレットの実行方法が異なります。Win XP で実行される非常に古いラップトップ (7 歳) と、Win で実行される 2 歳のデスクトップ PC です。 7. ブラウザーでテストしないというミスを犯してしまいました...

デスクトップで Dr. Java を使用してテストした場合、問題は発生しません。また、ブラウザでアプレットを実行しても問題は発生しません。ラップトップにエディタがインストールされている場合にのみ発生します。問題は、コードではなく、「古い技術」で実行されているコード エディターにあると思います。

4

2 に答える 2

2

簡単な答えはあなたができないということです。ご想像のとおり、initとpaintは2つの異なるスレッドによって呼び出されています。

私が考える最もエレガントなソリューションは

  1. paintメソッドでnullを確認します
  2. initメソッドでEventQueue.invokeLaterを使用し、その中に初期化コードを配置して、完了したらrepaintを呼び出します。
于 2012-12-04T20:06:40.917 に答える
0
public void init() {
   // do my initing...
   inited = true;
   repaint();
}

public void paint(Graphics g) {
   if (!inited) {
      return;
   }

   // do my painting...
}
于 2012-12-04T20:15:52.577 に答える