diff --git a/bind/genjava.go b/bind/genjava.go
index a373854..4ffccf2 100644
--- a/bind/genjava.go
+++ b/bind/genjava.go
@@ -530,7 +530,7 @@
 	}
 	if returnsError {
 		g.Printf(`String _err = _out.readString();
-if (_err != null) {
+if (_err != null && !_err.isEmpty()) {
     throw new Exception(_err);
 }
 `)
diff --git a/bind/java/SeqTest.java b/bind/java/SeqTest.java
index a797543..b4f0f7a 100644
--- a/bind/java/SeqTest.java
+++ b/bind/java/SeqTest.java
@@ -81,6 +81,13 @@
     String want = "a short string";
     String got = Testpkg.StrDup(want);
     assertEquals("Strings should match", want, got);
+
+    want = "";
+    got = Testpkg.StrDup(want);
+    assertEquals("Strings should match (empty string)", want, got);
+
+    got = Testpkg.StrDup(null);
+    assertEquals("Strings should match (null string)", want, got);
   }
 
   public void testLongString() {
diff --git a/bind/java/seq_android.c b/bind/java/seq_android.c
index dfb2988..52f7901 100644
--- a/bind/java/seq_android.c
+++ b/bind/java/seq_android.c
@@ -282,7 +282,7 @@
 Java_go_Seq_readUTF16(JNIEnv *env, jobject obj) {
 	int32_t size = *MEM_READ(obj, int32_t);
 	if (size == 0) {
-		return NULL;
+		return (*env)->NewString(env, NULL, 0);
 	}
 	return (*env)->NewString(env, (jchar*)mem_read(env, obj, 2*size, 1), size);
 }
diff --git a/bind/testdata/basictypes.java.golden b/bind/testdata/basictypes.java.golden
index 98aed25..d0ad787 100644
--- a/bind/testdata/basictypes.java.golden
+++ b/bind/testdata/basictypes.java.golden
@@ -40,7 +40,7 @@
         go.Seq _out = new go.Seq();
         Seq.send(DESCRIPTOR, CALL_Error, _in, _out);
         String _err = _out.readString();
-        if (_err != null) {
+        if (_err != null && !_err.isEmpty()) {
             throw new Exception(_err);
         }
     }
@@ -52,7 +52,7 @@
         Seq.send(DESCRIPTOR, CALL_ErrorPair, _in, _out);
         _result = _out.readInt();
         String _err = _out.readString();
-        if (_err != null) {
+        if (_err != null && !_err.isEmpty()) {
             throw new Exception(_err);
         }
         return _result;
diff --git a/bind/testdata/interfaces.java.golden b/bind/testdata/interfaces.java.golden
index 7fd2425..25b0a36 100644
--- a/bind/testdata/interfaces.java.golden
+++ b/bind/testdata/interfaces.java.golden
@@ -25,7 +25,7 @@
         _in.writeRef(e.ref());
         Seq.send(DESCRIPTOR, CALL_CallErr, _in, _out);
         String _err = _out.readString();
-        if (_err != null) {
+        if (_err != null && !_err.isEmpty()) {
             throw new Exception(_err);
         }
     }
@@ -79,7 +79,7 @@
                 _in.writeRef(ref);
                 Seq.send(DESCRIPTOR, CALL_Err, _in, _out);
                 String _err = _out.readString();
-                if (_err != null) {
+                if (_err != null && !_err.isEmpty()) {
                     throw new Exception(_err);
                 }
             }
diff --git a/bind/testdata/issue12403.java.golden b/bind/testdata/issue12403.java.golden
index e98508e..a925bac 100644
--- a/bind/testdata/issue12403.java.golden
+++ b/bind/testdata/issue12403.java.golden
@@ -83,7 +83,7 @@
                 Seq.send(DESCRIPTOR, CALL_ToJSON, _in, _out);
                 _result = _out.readString();
                 String _err = _out.readString();
-                if (_err != null) {
+                if (_err != null && !_err.isEmpty()) {
                     throw new Exception(_err);
                 }
                 return _result;
diff --git a/bind/testdata/structs.java.golden b/bind/testdata/structs.java.golden
index 62b5e9c..332c03e 100644
--- a/bind/testdata/structs.java.golden
+++ b/bind/testdata/structs.java.golden
@@ -27,7 +27,7 @@
         Seq.send(DESCRIPTOR, CALL_IdentityWithError, _in, _out);
         _result = new S(_out.readRef());
         String _err = _out.readString();
-        if (_err != null) {
+        if (_err != null && !_err.isEmpty()) {
             throw new Exception(_err);
         }
         return _result;
@@ -92,7 +92,7 @@
             Seq.send(DESCRIPTOR, CALL_Identity, _in, _out);
             _result = new S(_out.readRef());
             String _err = _out.readString();
-            if (_err != null) {
+            if (_err != null && !_err.isEmpty()) {
                 throw new Exception(_err);
             }
             return _result;
