ClassNotFoundException: com.sun.jna.Platform in Java 21

16 views
Skip to first unread message

Alejandro Revilla

unread,
Apr 16, 2024, 9:05:26 AMApr 16
to jline...@googlegroups.com

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

Alejandro Revilla

unread,
Jun 16, 2024, 7:42:50 PMJun 16
to jline-users
For the record, this issue turned out to be a user error on my part.

A missing line in a very simple initialization code caused the system terminal to attempt initialization twice, leading to various confusing exceptions. JLine 3.26.1 is working great on Java 22 in our project.

Sorry for the noise.
Reply all
Reply to author
Forward
0 new messages