3

好吧,我正在用 Java 开发一个在线游戏。我有一个客户端和一个服务器。语音系统等待新消息显示如下:

public void addSpeech(String msg) {
    String newMsg = parsel10n(msg);
    m_narrator.addSpeech(parsel10n(newMsg));
    while (!m_narrator.getCurrentLine().equalsIgnoreCase(newMsg))
      ;
    while (!m_narrator.getAdvancedLine().equalsIgnoreCase(newMsg))
      ;
 } 

问题是.. 应用程序的其余部分由于 while 循环而停止。在这个循环中,我没有看到任何其他玩家移动或看到聊天。有没有一种方法可以在不使用循环触及应用程序(客户端)的其余部分的情况下运行此方法?是否应该涉及线程?我希望你能回答我。

4

3 回答 3

7

是的,应该涉及线程。

如果您只想与主执行线程并行启动任务,您可以这样做:

new Thread(){
   public void run(){
        addSpeech();
   }
}.start();

但是您必须检查您的数据结构是否可以从多个线程访问。

你可能想在任务结束时做点什么,等等。所以我建议你找一个关于 java 线程和任务队列的教程。

于 2012-09-10T16:15:42.383 回答
0

使用多线程。查看 java.util.concurrent 包以获取更多详细信息。您可以使用观察者模式来发送信号和通知。

于 2012-09-10T16:19:20.257 回答
0

要同时执行多个任务,您需要使用多个线程。

在任何情况下,除了在 GUI 线程上进行微不足道的计算或延迟之外,做任何事情都被认为是不好的做法,否则它可能会锁定一段时间。

于 2012-09-10T16:16:55.143 回答