我目前正在开发一个Java项目,其目标之一是在地图上显示用户的当前位置。代码完成后,我意识到用户可能会在应用程序仍在运行时拔掉GPS设备。在重新创建上述场景时,我发现应用程序永远会挂起代码:
detectedGPSPortBufferReader.readLine();
所以,我去了旧的Java Docs并找到了方法 enableReceiveTimeout(),一切都很完美。 (值为30000,30秒)
现在,我已经设法想到另一个场景,其中用户可以重新插入设备。在这种情况下,我的客户会希望设备再次开始阅读。但不幸的是,这种情况并没有发生。
我正与我的好友“The Good Old Java Docs”合作,并希望你们中的任何一个极客神能够指导我的旅程。
我的代码:
try {
myGPSConnector.detectedGPSPort.enableReceiveTimeout(3000);
if(myGPSConnector.detectedGPSPortBufferReader.readLine() != null)
{
myGPSConnector.nmeaResponse = myGPSConnector.detectedGPSPortBufferReader.readLine();
System.out.println(myGPSConnector.nmeaResponse);
}
}
catch (Exception e)
{
locationString = "GPS Device not detected.";
}
@derrabink:它可以是一个不同的流,因为我尝试使用以下扩展名来代码:
try {
myGPSConnector.detectedGPSPort.enableReceiveTimeout(3000);
if(myGPSConnector.detectedGPSPortBufferReader.readLine() != null)
{
myGPSConnector.nmeaResponse = myGPSConnector.detectedGPSPortBufferReader.readLine();
System.out.println(defaultGPSConnector.nmeaResponse);
}
}
catch (Exception e)
{
locationString = "GPS Device not detected.";
try {
defaultGPSConnector.detectedGPSPort.enableReceiveTimeout(30);
}
catch (UnsupportedCommOperationException e1)
{
System.out.println("UnsupportedCommOperationException");
}
try {
locationString = defaultGPSConnector.detectedGPSPortBufferReader.readLine();
}
catch (IOException e1)
{
System.out.println("IOException ");
}
它始终打印 IOException
答案 0 :(得分:1)
我为if
声明更改了while
:
while ( myGPSConnector.detectedGPSPortBufferReader.readLine() == null ) {
// don't do anything. Will stay here until the client decides to plug it again.
}
myGPSConnector.nmeaResponse = myGPSConnector.detectedGPSPortBufferReader.readLine();
System.out.println(myGPSConnector.nmeaResponse);
编辑。
for (long stop=System.nanoTime()+TimeUnit.SECONDS.toNanos(30); stop>System.nanoTime();)
{
//this loop will execute for exactly 30 seconds
if ( myGPSConnector.detectedGPSPortBufferReader.readLine() != null )
{
myGPSConnector.nmeaResponse = myGPSConnector.
detectedGPSPortBufferReader.readLine();
System.out.println(myGPSConnector.nmeaResponse);
}
}
所以,你有一个30秒的循环,如果没有什么东西可以阅读,那就意味着这个人有比玩GPS更好的事情。
这是我的方法。小心,可能无法正常工作。