diff --git a/server/src/main/java/com/genymobile/scrcpy/Controller.java b/server/src/main/java/com/genymobile/scrcpy/Controller.java index 0cdadfae..2dfe966e 100644 --- a/server/src/main/java/com/genymobile/scrcpy/Controller.java +++ b/server/src/main/java/com/genymobile/scrcpy/Controller.java @@ -26,7 +26,7 @@ public class Controller implements AsyncProcessor { private Thread thread; - private final UhidManager uhidManager; + private UhidManager uhidManager; private final Device device; private final ControlChannel controlChannel; @@ -52,7 +52,13 @@ public class Controller implements AsyncProcessor { this.powerOn = powerOn; initPointers(); sender = new DeviceMessageSender(controlChannel); - uhidManager = new UhidManager(sender); + } + + private UhidManager getUhidManager() { + if (uhidManager == null) { + uhidManager = new UhidManager(sender); + } + return uhidManager; } private void initPointers() { @@ -98,7 +104,9 @@ public class Controller implements AsyncProcessor { // this is expected on close } finally { Ln.d("Controller stopped"); - uhidManager.closeAll(); + if (uhidManager != null) { + uhidManager.closeAll(); + } listener.onTerminated(true); } }, "control-recv"); @@ -431,7 +439,7 @@ public class Controller implements AsyncProcessor { private void uhidOpen(int id, byte[] data) { try { - uhidManager.open(id, data); + getUhidManager().open(id, data); } catch (IOException e) { Ln.e("Could not open UHID", e); } @@ -439,7 +447,7 @@ public class Controller implements AsyncProcessor { private void uhidWriteInput(int id, byte[] data) { try { - uhidManager.writeInput(id, data); + getUhidManager().writeInput(id, data); } catch (IOException e) { Ln.e("Could not write UHID input", e); }