我正在尝试关闭蓝牙服务,但 Bluecove 在连接关闭方法(https://code.google.com/p/bluecove/issues/detail?id=90)上有错误,我正在尝试做一些解决方法来重新启动服务。我认为重新启动蓝牙堆栈将解决我的问题。我可以以编程方式进行吗?我正在使用微软蓝牙堆栈。
问问题
997 次
1 回答
5
问题就这样解决了。
我重新启动了应用程序,但首先手动关闭了 bluecove。
BlueCoveImpl.shutdown();
如果我只重新启动应用程序,bluecove 会关闭,但无法在启动期间初始化蓝牙堆栈。这是重启方法:
public static void restartApplication(Runnable runBeforeRestart)
throws IOException
{
try
{
// java binary
String java = System.getProperty("java.home") + "/bin/java";
// vm arguments
List<String> vmArguments = ManagementFactory.getRuntimeMXBean()
.getInputArguments();
StringBuffer vmArgsOneLine = new StringBuffer();
for (String arg : vmArguments)
{
// if it's the agent argument : we ignore it otherwise the
// address of the old application and the new one will be in
// conflict
if (!arg.contains("-agentlib"))
{
vmArgsOneLine.append(arg);
vmArgsOneLine.append(" ");
}
}
// init the command to execute, add the vm args
final StringBuffer cmd = new StringBuffer("\"" + java + "\" "
+ vmArgsOneLine);
// program main and program arguments
String[] mainCommand = System.getProperty(SUN_JAVA_COMMAND).split(
" ");
// program main is a jar
if (mainCommand[0].endsWith(".jar"))
{
// if it's a jar, add -jar mainJar
cmd.append("-jar " + new File(mainCommand[0]).getPath());
}
else
{
// else it's a .class, add the classpath and mainClass
cmd.append("-cp \"" + System.getProperty("java.class.path")
+ "\" " + mainCommand[0]);
}
// finally add program arguments
for (int i = 1; i < mainCommand.length; i++)
{
cmd.append(" ");
cmd.append(mainCommand[i]);
}
// execute the command in a shutdown hook, to be sure that all the
// resources have been disposed before restarting the application
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run()
{
try
{
Runtime.getRuntime().exec(cmd.toString());
}
catch (IOException e)
{
e.printStackTrace();
}
}
});
// execute some custom code before restarting
if (runBeforeRestart != null)
{
runBeforeRestart.run();
}
// at first shut down BlueCove manually
BlueCoveImpl.shutdown();
System.exit(0);
}
catch (Exception e)
{
// something went wrong
throw new IOException(
"Error while trying to restart the application", e);
}
}
于 2013-05-05T13:15:12.177 回答