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