【问题标题】:Java screen how to make the input line always be belowJava屏幕如何使输入行始终在下方
【发布时间】:2018-12-12 19:18:41
【问题描述】:

我的问题是: 当我用这种方法扫描用户输入时

public static void listenForCommand() {
    @SuppressWarnings("resource")
    final Scanner s = new Scanner(System.in);
    System.out.print(">");
    final String line = s.nextLine();

    String[] args = new String[line.split(" ").length-1];
    for (int i = 1; i < line.split(" ").length; i++)
        args[i-1] = line.split(" ")[i];

    commandEntered(line.split(" ")[0], args);
}

然后有“>” 但是如果某些内容被打印或记录,那么它看起来像这样 https://imgur.com/a/M5TE51b(我不能使用图像格式,因为它说:“你需要至少 10 个声望才能发布图像。”而我没有 10 个声望。)

那么我该如何解决这个问题?是否有一些 api 或库用于此?我希望它看起来像 spigot 或 bukkit。

我的命令监听类: 当控制台获得输入时,它会将第一个单词拆分为命令,其他所有内容都是 args。然后它会询问 main 中的每个注册命令是否有使用输入的命令名注册的命令。

package at.gebes.utils.command;

import java.util.Scanner;

import at.gebes.bot.Bot;

public final class CommandListener {

public static String[] commandNames = new String[1000];
public static String[] commandDescriptions = new String[1000];
private static CommandExecutor[] CommandClasses = new CommandExecutor[1000];
public static int counter = -1;

public static void registerCommand(final String CommandName, final String CommandDescription, final CommandExecutor CommandClass) {

    counter++;
    commandNames[counter] = (CommandName);
    commandDescriptions[counter] = (CommandDescription);
    CommandClasses[counter] = CommandClass;

}

public static void listenForCommand() {
    @SuppressWarnings("resource")
    final Scanner s = new Scanner(System.in);
    System.out.print(">\n");
    final String line = s.nextLine();
    //final String line = System.console().readLine();

    String[] args = new String[line.split(" ").length-1];
    for (int i = 1; i < line.split(" ").length; i++)
        args[i-1] = line.split(" ")[i];

    commandEntered(line.split(" ")[0], args);
}

public static void commandEntered(final String cmd, final String[] args) {

    if (counter < 0) {
        return;
    }

    boolean commandExists = false;
    try {

        for (int i = 0; i <= counter; i++) {

            if (commandNames[i].equalsIgnoreCase(cmd)) {
                CommandClasses[i].onCommand(commandNames[i], args);
                commandExists = true;
                break;
            }
        }

    } catch (final NullPointerException e) {
        e.printStackTrace();
    }

    if (!commandExists) {
        Bot.getLogger().info("Unknown Command. Try \"help\" for a list of commands.");
    }
}

}

【问题讨论】:

  • 什么是commandEntered,您在哪里打印help&gt; 以外的任何内容?请发帖minimal reproducible example
  • System.out.print("&gt;");改成这个System.out.println("&gt;");

标签: java


【解决方案1】:

在这种情况下,您必须在任何String 类型变量中记录当前屏幕,然后每次用户输入时都必须清除屏幕,然后显示记录的屏幕,然后显示输入行...

我想你明白我的意思了。

【讨论】:

  • 我试过了,但是: 1. 该行并不总是低于 2. 如果消息或异常在一段时间后被打印,它仍然看起来像这样
  • @Gebes,然后在打印出来的信息后面加上\n,问题就解决了
  • 我只希望输入行始终是最下面的行。如果有新的东西被打印出来,它应该在输入行的上方
  • @Gebes,在这种情况下,您必须在字符串变量中记录当前屏幕,然后在每次用户输入时清除屏幕,然后显示记录的屏幕,然后显示输入行......我想你得到了我的观点
猜你喜欢
  • 2018-01-31
  • 2021-04-06
  • 2015-10-29
  • 2021-11-21
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多