@Override public void shutdown() { if (!isLauncherRunning()) { return; } try { // Send a shutdown command to the launcher protocol.sendRequestWithoutResponse(MessageType.MSG_SHUTDOWN, null); } catch (IOException e) { // If launcher has already been shutdown, this shouldn't create an exception, all we want to // do is to make sure the protocol is down } try { // Then shutdown the protocol connection protocol.shutdown(); } catch (IOException e) { throw new OperaRunnerException("Unable to shut down launcher", e); } finally { binary.shutdown(); protocol = null; binary = null; } }