私の質問はJavaに固有のものではありませんが、私が望むものを達成するために使用している言語です。アプリケーションを継続的にループする正しい方法は何ですか
私はJavaでBluetoothを試しています。簡単な端末プログラム、つまり近くのBluetoothデバイスを検索してリストするGUIインターフェイスはありません。
import javax.bluetooth.*;
public class BluetoothTest implements DiscoveryListener{
private static boolean isAlive = true;
public static void main(String[] args) {
try {
LocalDevice ld = LocalDevice.getLocalDevice();
if (LocalDevice.isPowerOn()){
System.out.println("Power On.");
System.out.println("Friendly Name: " + ld.getFriendlyName());
System.out.println("Address: " + ld.getBluetoothAddress());
DiscoveryAgent da = ld.getDiscoveryAgent();
da.startInquiry(DiscoveryAgent.GIAC,new BluetoothTest());
while (isAlive){
/* Sleep */
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} else {
System.out.println("Power Off.");
}
} catch (BluetoothStateException e) {
System.out.println(e.toString());
}
}
public void setAlive(boolean status){
isAlive = status;
}
public void deviceDiscovered(RemoteDevice rd, DeviceClass dc){
try{
System.out.println(rd.getFriendlyName(true));
} catch (java.io.IOException e){
System.out.println(e.toString());
}
}
public void inquiryCompleted(int discType){
isAlive = false;
}
public void servicesDiscovered(int transID, ServiceRecord[] sr){
}
public void serviceSearchCompleted(int transID, int respCode){
}
}
()DiscoveryAgentオブジェクトのstartInquiryはすぐに返され、発見されているすべてのデバイスは、私が実装したDiscoveryListenerインターフェイスに返されます。次のように私のコードです。問題は、デバイスが発見される前にプログラムが終了するwhile()ループを含まない限りです。
アプリケーションを効率的に常駐させるにはどうすればよいですか?これは、別々の「作業中の」スレッドと、作業スレッドを生成するメインスレッドを持つことによって達成されますが、作業者が終了するまでそれ自身が眠りますか?
あなたの答えをありがとう。確かに私のコードは非常に荒く準備ができており、テストコードだけです。これは、Bluetoothディスカバリが完了する前にスレッドが完了しているという問題が原因で発生しました。したがって、この問題は(正しくプログラムする方法を試して理解するために) – Kerry