【发布时间】: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或>以外的任何内容?请发帖minimal reproducible example -
把
System.out.print(">");改成这个System.out.println(">");
标签: java