ヘッドフォンがシステムに接続されていることを検出し、ヘッドフォンを取り外したときに別のコードを実行するプログラムを作成しようとしています。コードは正常に動作していますが、私が直面している問題は、デバイスのステータスがキャッシュされているため、ヘッドフォンを抜いてからわずか 1 分でプログラムが削除されたことを検出することです。これは、コードを実行すると無限ループになります。
しかし、ループではなく単一のインスタンスを実行すると、実行時にすぐに正しいステータスが表示されます
コードは次のとおりです。
public class Headphonecheck {
public static int hpfound = 0;
public static int hpnfound =0;
public static void isHeadphoneAvailable() {
while (true)
{
if (!AudioSystem.isLineSupported(Port.Info.HEADPHONE) && hpnfound ==0) {
System.out.println("NO HEADPHONE FOUND");
System.out.println("Do something else");
hpfound = 0;
hpnfound = 1;
} else {
if(AudioSystem.isLineSupported(Port.Info.HEADPHONE) && hpfound ==0){
System.out.println("HEADPHONE FOUND");
System.out.println("Do something");
hpnfound = 0;
hpfound =1;
}
}
} //close while
}
public static void main (String[] args){
isHeadphoneAvailable();
}
}
while ループを削除してコードを実行すると、1 回の実行で完全に機能します。つまり、ヘッドフォンを接続してコードを実行すると、HEADPHONE FOUND と表示され、ヘッドフォンを取り外してコードを実行すると、NO HEADPHONE FOUND と表示されます。
ヘッドフォンを装着してコードを実行すると、While ループで 1 回、HEADPHONE FOUND と表示され、すぐにヘッドフォンを取り外すと NO HEADPHONE FOUND と表示されるまでに約 50 秒かかります。これは、50 秒間キャッシュしてからキャッシュをクリアしているためです。
キャッシュを停止する方法、またはキャッシュをクリアする方法