First of all, thank you for your hard work on JLine year after year.
Upgrading JLine to the latest and greatest 3.25.1, on Java 21, I noticed a new exception:
ClassNotFoundException: com.sun.jna.Platform
Here is the full stack trace:
java.lang.IllegalStateException: Unable to create a terminal
at org.jline.terminal.TerminalBuilder.doBuild(TerminalBuilder.java:394)
at org.jline.terminal.TerminalBuilder.build(TerminalBuilder.java:362)
at org.jpos.q2.CLI.buildTerminal(CLI.java:203)
at org.jpos.q2.CLI.<init>(CLI.java:61)
at org.jpos.q2.CLI.<init>(CLI.java:48)
at org.jpos.q2.Q2.parseCmdLine(Q2.java:770)
at org.jpos.q2.Q2.<init>(Q2.java:170)
at org.jpos.q2.Q2.main(Q2.java:986)
Suppressed: java.io.IOException: Unable to load terminal provider ffm: null
at org.jline.terminal.spi.TerminalProvider.load(TerminalProvider.java:71)
at org.jline.terminal.TerminalBuilder.checkProvider(TerminalBuilder.java:667)
at org.jline.terminal.TerminalBuilder.getProviders(TerminalBuilder.java:632)
at org.jline.terminal.TerminalBuilder.doBuild(TerminalBuilder.java:395)
... 7 more
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:74)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
at org.jline.terminal.spi.TerminalProvider.load(TerminalProvider.java:69)
... 10 more
Caused by: java.lang.UnsupportedOperationException: Native access is not enabled for the current module: unnamed module @4fcb38dd
at org.jline.terminal.impl.ffm.FfmTerminalProvider.<init>(FfmTerminalProvider.java:33)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
... 13 more
Suppressed: java.io.IOException: Unable to load terminal provider jansi: null
at org.jline.terminal.spi.TerminalProvider.load(TerminalProvider.java:71)
at org.jline.terminal.TerminalBuilder.checkProvider(TerminalBuilder.java:667)
at org.jline.terminal.TerminalBuilder.getProviders(TerminalBuilder.java:636)
at org.jline.terminal.TerminalBuilder.doBuild(TerminalBuilder.java:395)
... 7 more
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:74)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
at org.jline.terminal.spi.TerminalProvider.load(TerminalProvider.java:69)
... 10 more
Caused by: java.lang.NoClassDefFoundError: org/fusesource/jansi/internal/Kernel32
at org.jline.terminal.impl.jansi.JansiTerminalProvider.verifyAtLeast(JansiTerminalProvider.java:85)
at org.jline.terminal.impl.jansi.JansiTerminalProvider.<init>(JansiTerminalProvider.java:93)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
... 13 more
Caused by: java.lang.ClassNotFoundException: org.fusesource.jansi.internal.Kernel32
... 16 more
Suppressed: java.io.IOException: Unable to load terminal provider jna: null
at org.jline.terminal.spi.TerminalProvider.load(TerminalProvider.java:71)
at org.jline.terminal.TerminalBuilder.checkProvider(TerminalBuilder.java:667)
at org.jline.terminal.TerminalBuilder.getProviders(TerminalBuilder.java:638)
at org.jline.terminal.TerminalBuilder.doBuild(TerminalBuilder.java:395)
... 7 more
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:74)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
at org.jline.terminal.spi.TerminalProvider.load(TerminalProvider.java:69)
... 10 more
Caused by: java.lang.NoClassDefFoundError: com/sun/jna/Platform
at org.jline.terminal.impl.jna.JnaNativePty.isatty(JnaNativePty.java:192)
at org.jline.terminal.impl.jna.JnaNativePty.isPosixSystemStream(JnaNativePty.java:170)
at org.jline.terminal.impl.jna.JnaTerminalProvider.checkSystemStream(JnaTerminalProvider.java:124)
at org.jline.terminal.impl.jna.JnaTerminalProvider.<init>(JnaTerminalProvider.java:31)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
... 13 more
Caused by: java.lang.ClassNotFoundException: com.sun.jna.Platform
... 18 more
Suppressed: java.lang.IllegalStateException: A system terminal is already running. Make sure to use the created system Terminal on the LineReaderBuilder if you're using one or that previously created system Terminals have been correctly closed.
at org.jline.terminal.TerminalBuilder.doBuild(TerminalBuilder.java:455)
... 7 more
I traced the problem down to 3.23.0 when it first appeared. 3.22.0 doesn’t raise any exception.
Do you want me to raise an issue with this info or you believe it’s just an user error on my side?
—
@apr