diff --git a/README.md b/README.md index d3169dd..7c3e059 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,13 @@ _A platform-independent serial port access library for Java._ For usage examples, please refer to the [Usage wiki](https://github.com/Fazecast/jSerialComm/wiki/Usage-Examples). +If you intend to use the library in multiple applications simultaneously, please make sure +to set ```fazecast.jSerialComm.appid``` property before accessing the SerialPort class so that +applications don't accidentally delete each others temporary files during boot-up: +``` +System.setProperty("fazecast.jSerialComm.appid", "YOUR_APPLICATION_IDENTIFIER") +``` + In order to use the ```jSerialComm``` library in your own project, you must simply include the JAR file in your build path and import it like any other Java package using ```import com.fazecast.jSerialComm.*;```. diff --git a/src/main/java/com/fazecast/jSerialComm/SerialPort.java b/src/main/java/com/fazecast/jSerialComm/SerialPort.java index aca3f2e..d206bbd 100644 --- a/src/main/java/com/fazecast/jSerialComm/SerialPort.java +++ b/src/main/java/com/fazecast/jSerialComm/SerialPort.java @@ -51,6 +51,9 @@ public final class SerialPort { // Static initializer loads correct native library for this machine private static final String versionString = "2.7.0"; + // Used to distinguish multiple processes running this lib + private static final String TMPDIR_APPID_PROPERTY = "fazecast.jSerialComm.appid"; + private static volatile boolean isAndroid = false; private static volatile boolean isUnixBased = false; private static volatile boolean isWindows = false; @@ -62,7 +65,13 @@ public final class SerialPort String tempFileDirectory = System.getProperty("java.io.tmpdir"); if ((tempFileDirectory.charAt(tempFileDirectory.length()-1) != '\\') && (tempFileDirectory.charAt(tempFileDirectory.length()-1) != '/')) tempFileDirectory += "/"; + + // Make sure to use appId to separate tmpdir directories if library is used by multiple modules, so they don't erase each others folders accidentally. + String appId = System.getProperty(TMPDIR_APPID_PROPERTY, ""); tempFileDirectory += "jSerialComm/"; + if (!appId.isEmpty()) { + tempFileDirectory += appId + (!appId.endsWith("/") ? "/" : ""); + } deleteDirectory(new File(tempFileDirectory)); // Determine Operating System and architecture