You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下Lanterna无法识别JNA及jna-platform依赖的解决咨询

问题背景

我开发了一个Lanterna TUI程序,在Ubuntu上运行正常,目前正在Windows 11上测试。使用javaw命令运行时,会创建独立终端,但移动光标时会出现卡顿。因此尝试将JNA和jna-platform添加到类路径,不过尽管确认文件存在,JNA仍未被识别。

我从JNA仓库下载了5个jar文件,路径如下:

  • C:\temp\windows_requirements\jna-5.14.0.jar
  • C:\temp\windows_requirements\jna-jpms-5.14.0.jar
  • C:\temp\windows_requirements\jna-platform-5.14.0.jar
  • C:\temp\windows_requirements\jna-platform-jpms-5.14.0.jar
  • C:\temp\windows_requirements\win32-x86-64.jar
已尝试的解决方案

方案一:Gradle依赖添加

在build.gradle文件的依赖中添加JNA:

dependencies {
    ...
    // Use Lanterna on Windows
    implementation 'net.java.dev.jna:jna:5.14.0'
    ...
}

该方案在Ubuntu上编译运行正常,但Windows仍报错。

方案二:命令行指定类路径

执行以下命令:

java -classpath "C:temp\windows_requirements\jna-5.14.0.jar;C:\temp\windows_requirements\jna-platform-5.14.0.jar;C:\temp\some-project-all.jar" -jar some-project-all.jar

执行后仍出现相同错误。

方案三:动态修改类路径+ShadowJar打包

确保build.gradle中包含JNA依赖,执行clear && ./gradlew build shadowJar生成包含所有依赖的jar包,运行命令java -jar build/libs/some-project-all.jar,输出显示类路径已更新,但仍抛出错误:

Classpath=some-project-all.jarEND
Updated Classpath: some-project-all.jar;C:\temp\windows_requirements\jna-5.14.0.jar;C:\temp\windows_requirements\jna-platform-5.14.0.jar
....
java.IOException: To use Lanterna on Windows, either add JNA (and jna-platform) to the classpath or use javaw! 
核心问题

如何确保Windows环境下的some-project-all.jar能识别JNA及jna-platform依赖?

Java版本
  • Ubuntu:OpenJDK 19.0.2
  • Windows:Java 21.0.1 LTS

解决方法

1. 补全Gradle依赖配置

Lanterna在Windows上需要同时依赖jna和jna-platform,修正build.gradle的依赖块:

dependencies {
    // 替换为你实际使用的Lanterna版本
    implementation 'com.googlecode.lanterna:lanterna:3.2.0'
    // Windows环境必需的JNA依赖
    implementation 'net.java.dev.jna:jna:5.14.0'
    implementation 'net.java.dev.jna:jna-platform:5.14.0'
}

2. 正确配置ShadowJar打包

确保ShadowJar将JNA的所有依赖(包括native库)打包到最终jar中,在build.gradle中添加ShadowJar配置:

plugins {
    id 'java'
    id 'com.github.johnrengelman.shadow' version '8.1.1'
}

shadowJar {
    // 合并JNA的服务文件,确保native库加载正常
    mergeServiceFiles()
    // 指定主类,允许直接用java -jar运行
    manifest {
        attributes 'Main-Class': '你的主类全路径'
    }
}

重新执行打包命令:

./gradlew clean shadowJar

生成的jar文件在build/libs/目录下,直接运行即可:

java -jar build/libs/some-project-all.jar

3. 修正命令行运行的类路径错误

之前的命令行存在路径拼写错误(C:temp缺少反斜杠),且-jar参数会忽略手动指定的-cp,正确命令如下:

java -cp "C:\temp\windows_requirements\jna-5.14.0.jar;C:\temp\windows_requirements\jna-platform-5.14.0.jar;C:\temp\some-project-all.jar" 你的主类全路径

4. 确保JNA Native库被加载

如果手动下载了win32-x86-64.jar,需要将其加入类路径;或者直接通过Gradle自动获取对应平台的native库:

implementation 'net.java.dev.jna:jna-platform:5.14.0:natives-windows-x86-64'

5. 版本兼容性检查

确认Lanterna版本与JNA版本兼容(Lanterna 3.x系列适配JNA 5.x),Java 21与JNA 5.14.0兼容,无需降级Java版本。


内容的提问来源于stack exchange,提问作者a.t.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 14:05:40