首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构建后的JLine3“无法创建系统终端”

构建后的JLine3“无法创建系统终端”
EN

Stack Overflow用户
提问于 2018-06-07 09:33:41
回答 1查看 3.1K关注 0票数 4

我只是尝试用Jansi实现JLine,但是它总是抛出引用org.jline.terminal.impl.jansi.JansiSupportImpl#winSysTerminal的相同的UnsupportedOperationException。检查此方法时,只有一个简单的if来决定此异常。

所以版本号一定是问题所在。为了检查它们,我将检测版本的代码复制到我的源代码中。

代码语言:javascript
复制
public static void main(String[] args) throws Exception {

    String v = Ansi.class.getPackage().getImplementationVersion();
    System.out.println(Ansi.class.getPackage());
    if (v != null) {
        Matcher m = Pattern.compile("([0-9]+)\\.([0-9]+)([\\.-]\\S+)?").matcher(v);
        if (m.matches()) {
            System.out.println("Major: " + Integer.parseInt(m.group(1)));
            System.out.println("Minor: " + Integer.parseInt(m.group(2)));
        }
    }

    //System.setProperty("jansi.passthrough", "true");
    AnsiConsole.systemInstall();

    String prompt = Ansi.ansi()
            .eraseScreen()
            .fg(Ansi.Color.BLUE).bold().a("Console")
            .fgBright(Ansi.Color.BLACK).bold().a(" > ")
            .reset().toString();

    Terminal terminal = TerminalBuilder.builder()
            .system(true)
            .dumb(false)
            .encoding(Charset.forName("UTF-8"))
            .name("Terminal")
            .jna(false)
            .jansi(true)
            .build();

    LineReader reader = LineReaderBuilder.builder()
            .terminal(terminal)
            .build();

    String line;

    while ((line = reader.readLine(prompt)) != null) {
        System.out.println(line);
    }

}

结果让我感到惊讶:虽然它在package org.fusesource.jansi, jansi, version 1.17.1, Major: 1, Minor: 17中返回IntelliJ,但是控制台不能工作,因为intellijs虚拟控制台,但是当我在构建后从命令行运行它时,它只返回package org.fusesource.jansi。这必须是intellij删除包含信息的清单造成的。它们不能打包,因为它们的名称与我运行jar文件所需的清单相同。

你们知道什么解决办法或解决办法吗?您如何处理此异常?或者我有什么失败的地方吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 12:10:17

似乎你在自己的罐子里嵌入了Jansi。如果您使用Jansi,您应该能够对jar的MANIFEST.MF进行黑客攻击,以包含Jansi的相关信息。

代码语言:javascript
复制
Manifest-Version: 1.0
Created-By: peter
...

Name: org/fusesource/jansi/
Implementation-Version: 1.17.1
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50737843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档