-
Bug
-
Resolution: Not an Issue
-
P4
-
None
-
8, 11, 17
-
generic
-
generic
ADDITIONAL SYSTEM INFORMATION :
OS: Windows 11
java 8:
java version "1.8.0_371"
Java(TM) SE Runtime Environment (build 1.8.0_371-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.371-b11, mixed mode)
java 11:
java version "11.0.19" 2023-04-18 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.19+9-LTS-224)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.19+9-LTS-224, mixed mode)
java 17:
java version "17.0.7" 2023-04-18 LTS
Java(TM) SE Runtime Environment (build 17.0.7+8-LTS-224)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.7+8-LTS-224, mixed mode, sharing)
A DESCRIPTION OF THE PROBLEM :
When the constructor of URLClassLoader is called, if the parameter is a new URL array, JDK11 and JDK17 will throw a NPE, but JDK8 will not.
Should JDK11 and JDK17 be compatible with the behavior of JDK8?
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Step1. Create test case
import java.net.URL;
import java.net.URLClassLoader;
public class Case {
public static void main(String[] args) {
new URLClassLoader(new URL[64]);
}
}
Step2 compile and run the Case with JDK8u371 & JDK11.0.19 & JDK17.0.7
> D:\jdk\jdk8u371\bin\java Case
<nothing>
> D:\jdk\jdk-11.0.19\bin\java Case
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.ArrayDeque.addLast(ArrayDeque.java:304)
at java.base/java.util.ArrayDeque.add(ArrayDeque.java:495)
at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:155)
at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:172)
at java.base/java.net.URLClassLoader.<init>(URLClassLoader.java:165)
at Case.main(Case.java:7)
> D:\jdk\jdk-17.0.7\bin\java Case
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.ArrayDeque.addLast(ArrayDeque.java:303)
at java.base/java.util.ArrayDeque.add(ArrayDeque.java:494)
at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:159)
at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:176)
at java.base/java.net.URLClassLoader.<init>(URLClassLoader.java:152)
at Case.main(Case.java:7)
ACTUAL -
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.ArrayDeque.addLast(ArrayDeque.java:303)
at java.base/java.util.ArrayDeque.add(ArrayDeque.java:494)
at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:159)
at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:176)
at java.base/java.net.URLClassLoader.<init>(URLClassLoader.java:152)
at Case.main(Case.java:7)
---------- BEGIN SOURCE ----------
import java.net.URL;
import java.net.URLClassLoader;
public class Case {
public static void main(String[] args) {
new URLClassLoader(new URL[64]);
}
}
---------- END SOURCE ----------
OS: Windows 11
java 8:
java version "1.8.0_371"
Java(TM) SE Runtime Environment (build 1.8.0_371-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.371-b11, mixed mode)
java 11:
java version "11.0.19" 2023-04-18 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.19+9-LTS-224)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.19+9-LTS-224, mixed mode)
java 17:
java version "17.0.7" 2023-04-18 LTS
Java(TM) SE Runtime Environment (build 17.0.7+8-LTS-224)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.7+8-LTS-224, mixed mode, sharing)
A DESCRIPTION OF THE PROBLEM :
When the constructor of URLClassLoader is called, if the parameter is a new URL array, JDK11 and JDK17 will throw a NPE, but JDK8 will not.
Should JDK11 and JDK17 be compatible with the behavior of JDK8?
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Step1. Create test case
import java.net.URL;
import java.net.URLClassLoader;
public class Case {
public static void main(String[] args) {
new URLClassLoader(new URL[64]);
}
}
Step2 compile and run the Case with JDK8u371 & JDK11.0.19 & JDK17.0.7
> D:\jdk\jdk8u371\bin\java Case
<nothing>
> D:\jdk\jdk-11.0.19\bin\java Case
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.ArrayDeque.addLast(ArrayDeque.java:304)
at java.base/java.util.ArrayDeque.add(ArrayDeque.java:495)
at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:155)
at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:172)
at java.base/java.net.URLClassLoader.<init>(URLClassLoader.java:165)
at Case.main(Case.java:7)
> D:\jdk\jdk-17.0.7\bin\java Case
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.ArrayDeque.addLast(ArrayDeque.java:303)
at java.base/java.util.ArrayDeque.add(ArrayDeque.java:494)
at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:159)
at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:176)
at java.base/java.net.URLClassLoader.<init>(URLClassLoader.java:152)
at Case.main(Case.java:7)
ACTUAL -
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.ArrayDeque.addLast(ArrayDeque.java:303)
at java.base/java.util.ArrayDeque.add(ArrayDeque.java:494)
at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:159)
at java.base/jdk.internal.loader.URLClassPath.<init>(URLClassPath.java:176)
at java.base/java.net.URLClassLoader.<init>(URLClassLoader.java:152)
at Case.main(Case.java:7)
---------- BEGIN SOURCE ----------
import java.net.URL;
import java.net.URLClassLoader;
public class Case {
public static void main(String[] args) {
new URLClassLoader(new URL[64]);
}
}
---------- END SOURCE ----------
- relates to
-
JDK-8198810 URLClassLoader does not specify behavior when URL array contains null
-
- Closed
-