File tree Expand file tree Collapse file tree
src/main/java/org/apache/commons/io/input Expand file tree Collapse file tree Original file line number Diff line number Diff line change 2626
2727import org .apache .commons .io .IOUtils ;
2828
29- import sun .misc .Cleaner ;
3029import sun .nio .ch .DirectBuffer ;
3130
3231/**
@@ -129,13 +128,19 @@ private void bufferCleaner(final DirectBuffer buffer) {
129128 //
130129 final String specVer = System .getProperty ("java.specification.version" );
131130 if ("1.8" .equals (specVer )) {
132- // On Java 8.
133- final Cleaner cleaner = buffer .cleaner ();
134- if (cleaner != null ) {
135- cleaner .clean ();
131+ // On Java 8, but also compiles on Java 11.
132+ try {
133+ final Class <?> cls = Class .forName ("sun.misc.Cleaner" );
134+ final Object cleaner = buffer .cleaner ();
135+ if (cleaner != null ) {
136+ final Method cleanMethod = cls .getMethod ("clean" );
137+ cleanMethod .invoke (cleaner );
138+ }
139+ } catch (ReflectiveOperationException e ) {
140+ throw new IllegalStateException (e );
136141 }
137142 } else {
138- // On Java 9 and up, but compiled on Java 8.
143+ // On Java 9 and up, but compiles on Java 8.
139144 try {
140145 final Class <?> cls = Class .forName ("sun.misc.Unsafe" );
141146 final Method cleanerMethod = cls .getMethod ("invokeCleaner" , ByteBuffer .class );
You can’t perform that action at this time.
0 commit comments