Javaでロックを取得せずにwait()メソッドを呼び出すことはできますか?
いいえ 、 wait()を呼び出すことはできません メソッドロックを取得せずに 。 Javaでは、ロックが取得されたら、 wait()メソッド()を呼び出す必要があります。 そのオブジェクトでタイムアウトありまたはタイムアウトなし)。 wait()を呼び出そうとしている場合 ロックを取得せずにメソッドを実行すると、 java.lang.IllegalMonitorStateExceptionがスローされる可能性があります 。
例
public class ThreadStateTest extends Thread { public void run() { try { wait(1000); } catch(InterruptedException ie) { ie.printStackTrace(); } } public static void main(String[] s) { ThreadStateTest test = new ThreadStateTest(); test.start(); } }
上記の例では、 wait()を呼び出す必要があります ロックを取得せずにメソッドを実行して、 IllegalMonitorStateExceptionを生成します 実行時に。この問題を修正するには、 wait()を呼び出す前にロックを取得する必要があります メソッドを作成し、 run()を宣言します メソッド同期
Exception in thread "Thread-0" java.lang.IllegalMonitorStateException at java.lang.Object.wait(Native Method) at ThreadStateTest.run(ThreadStateTest.java:4)
-
JavaでinvokeLater()メソッドを呼び出すにはどうすればよいですか?
invokeLater() メソッドは静的です SwingUtilitiesのメソッド クラスであり、タスクを非同期に実行するために使用できます。 AWT イベントディスパッチャスレッド 。 SwingUtilities.invokeLater() メソッドはSwingUtilities.invokeAndWait()のように機能します ただし、リクエストはイベントキューに配置されます そしてすぐに戻る 。 invokeLater() メソッドは、実行可能内のコードのブロックを待機しません ターゲットによって参照されます 実行します。 構文 public static void in
-
JavaでJPanelのpaintComponent()メソッドを実装するにはどうすればよいですか?
JPanel は軽量のコンテナであり、見えない コンポーネント Javaで。 JPanelのデフォルトのレイアウトはFlowLayout 。 JPanelを作成したら、他のコンポーネントを JPanelに追加できます。 add()を呼び出してオブジェクトを作成します コンテナから継承されたメソッド クラス。 paintComponent() このメソッドは、 JPanelで何かを描画するために必要です 背景色を描く以外。このメソッドは、 JPanelにすでに存在します スーパーを使用する必要があるようにクラス このメソッドに何かを追加し、グラフィックスを取る宣言 オブジェクト パラメータ