ロボットのリソース(部品を表すオブジェクト)を取得し、GUIで遠隔操作する。content.指定した時間前進させるMaterealライブラリではロボットは種類ごとにRobotインタフェースの実装クラスとして定義されており、車輪やカメラといった部品(リソース)の集合を持っています。ロボットを直接操作するためには、ロボットを表すインスタンスからリソースを取得し、そのリソースが持つメソッドを呼び出します。車輪は複数のスレッドから操作されると指示が競合します。これを避けるため、排他制御が必要なリソースは一つのオブジェクトから取得されるとロックされ、他からは取得できなくなります。排他的に使用しているリソースは、使用後に解放する必要があります。ネットタンサーを7秒間前進させて停止、終了するコードは次のようになります。Object)の第二引数と同じオブジェクトを指していれば何でもよいです。GoForward.class);Matereal.getInstance().dispose();}}}なお、車輪の動作状況を見ることには排他制御は不要です。一般に、排他制御はリソースへの書き込みに関しては必要ですが、読み出しには不要です。このような場合を考慮して、Materealでは同じリソースオブジェクトを異なるインタフェースで取得することができるようになっています。車輪を表すインタフェースはWheelsControllerとWheelsの二つあり、前者が排他制御を必要とするインタフェースで後者が読み取り専用のインタフェースです。排他制御が必要なインタフェースはExclusiveResourceを継承しています。それぞれ用意されているメソッドが違うことに注意してください。次のようなコードは、車輪を操作する何らかの排他制御が働いているときにも成功します。this);System.out.println(w.getStatus());ロボットをボタン操作で動かす基本が分かってしまえばあとはGUIプログラミングです。Editorで作りました。コンストラクタでロボットをインスタンス化し、リソースを取得しています。いったリソースのメソッドを呼び出しています。終了時に呼び出されるdispose()でリソースを解放しています。}全文はSimpleButtonController.javaを読んでください。ロボットをカーソルキー操作で動かすこちらのほうが、ロボットを操作する部分が簡潔なコードにまとまりました。KeyEvent.VK_ESCAPE:default:wheels.stop();break;}}});全文はSimpleKeyController.javaを読んでください。シンプルでないKeyController.javaもあります。こちらは差動車輪の左右の出力を動的に変えられます。出力値をリアルタイムにGUIで表示します。