我正在尝试编写一个程序来检测耳机何时插入系统,然后在您移除耳机时运行另一段代码。代码工作正常,但我面临的问题是设备的状态正在被缓存,所以在我拔出耳机后仅 1 分钟我的程序检测到它已被移除。当我运行代码时会发生这种情况,这是一个无休止的 while 循环。
但是如果我不在循环中运行单个实例,它会在运行时立即显示正确的状态
这是代码:
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循环并运行代码,它可以完美地用于单次运行..即您插入耳机并运行代码它显示HEADPHONE FOUND,然后当您移除耳机并运行代码时它显示NO HEADPHONE FOUND。
在while循环中,如果你有耳机并运行代码,它会显示HEADPHONE FOUND,然后如果你立即取下耳机,大约需要50秒才能显示NO HEADPHONE FOUND。这是因为它正在缓存 50 秒,然后清除缓存
如何阻止它缓存或清除缓存