【问题标题】:Print string to a java.io.Console object将字符串打印到 java.io.Console 对象
【发布时间】:2015-06-25 15:26:00
【问题描述】:

我正在制作一个多人游戏,每个玩家在屏幕上都有自己的输入/输出控制台。我在尝试这样做时遇到了一些麻烦。我不希望每个玩家都看到其他玩家的输入/输出。

打个比方,我想做playerOneConsole.out.println("Player One String");之类的东西,而不是System.out.println("Player One String");,每个人都可以看到玩家的东西。

在阅读了一些文档后,我尝试了这个,但它没有按预期工作,因为它抛出了 NullPointerException:

public class Player {

    String myName;
    Console myConsole;

    public Player(String name) {
        myName = name;
        myConsole = System.console();
    }


    public void takeTurn(String playerOptions){
        myConsole.writer().print(playerOptions); //This is not right.
    }
}

我希望 playerOptions 专门打印到该播放器的控制台,而不是 System 控制台。

顺便说一句,如果有什么不同的话,我正在使用 NetBeans IDE 8.0.2。

【问题讨论】:

  • 所以大概myConsolenull,因为您在System.console() 返回null 的环境中运行,例如在 Eclipse 中?
  • 既然有多个控制台,就必须以某种方式实现它们,并且必须有一种分别解决它们的方法。在 Linux/Unix 系统上,我猜它们最终将通过单独的文件句柄来解决,无论是否在应用程序软件、操作系统软件或操作系统硬件中实现。它是哪一个?如果在应用软件中它是您自己设计的东西的第 3 方?如果是第 3 方,请查看 API 以获取解决方案。
  • 也许您可以使用 Pty4J 在 Java 中实现的伪终端 (pty),它提供读/写访问,但需要在每个 pty 中运行某种 shell。它支持 Linux、OSX 和 Windows 平台,可在github.com/traff/pty4j 获得。

标签: java printing console


【解决方案1】:

使用java.io.Console 时,您必须从控制台执行 Java 应用程序,例如Windows CMD 或 Linux 终端。大多数 IDE 不会通过控制台执行 Java,因此 System#console 返回 null

顺便说一下,这段代码:

myConsole.writer().print(playerOptions); //This is not right.

确实是这样:)

【讨论】:

  • 我已经成功构建了我的应用程序并在 Windows 命令提示符下运行它。它运行但只是忽略调用myConsole.writer().print(playerOptions); 的行。我应该期待一个新的 cmd 窗口打开,对吧?如果我以管理员身份运行命令提示符,我会收到以下错误:错误:注册表项 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion' 的值为 '1.8',但需要 '1.7'。错误:找不到 java.dll 错误:找不到 Java SE 运行时环境。
  • 您确定该行已执行且不为空?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
  • 2016-03-31
  • 2023-04-10
  • 1970-01-01
  • 2018-07-09
  • 2021-12-13
相关资源
最近更新 更多