Java / Swing: обрабатывать одновременный ввод GUI и CLI - PullRequest
0 голосов
/ 01 мая 2018

Я создаю приложение Swing (небольшая игра), в котором игрок делает выбор, нажимая кнопки «Да» или «Нет», и я хотел бы иметь возможность одновременно играть в игру с терминала.

Чего я хочу добиться, так это чтобы кнопки выбора отображались в графическом интерфейсе, в CLI отображается некоторый текст, и я начинаю ждать ввода с чем-то вроде System.console.readLine ( ).

Хитрость в том, что игрок должен иметь возможность переключаться между GUI и CLI в любой момент, чтобы сделать свой выбор. По этой причине, когда появляется выбор, я запускаю поток с readLine () и кнопкой I прикрепил слушатель действия. (Но если у вас есть другой подход к решению проблемы, пожалуйста)

Так вот в чем проблема: как я могу перестать ждать ввода пользователя от CLI, если выбор был сделан в GUI? (Как и ожидалось, ни thread.interrupt (), ни thread.stop () на самом деле не останавливают readLine () от ожидания ввода пользователя)

1 Ответ

0 голосов
/ 01 мая 2018

На вашем месте я бы создал два класса с резьбой

  public class MyGuiGame extends Thread { // or impelment runnalbe
      // implement run for your game model
      // you can impelemnt a game service class to be used in
  }

тогда я бы создал еще один класс

  public class MyConsoleGame extends Thread { // or implement runnalble
     // implement your console game here
  }

тогда в моем классе appMain в методе запуска я бы сделал

     public static void main(String[] args){
            new MyConsoleGame().start(); 
            new MyGuiGame().start;
     }

это простая идея, основанная на потоках, но вы должны улучшить ее, используя все шаблоны проектирования и принципы безопасной потоков

для входной задачи вы должны реализовать потребительскую архитектуру производителя в своем хранилище данных (что вы должны прочитать)

тогда вы должны проверить те, что общее хранилище данных не является нулевым или пустым попробуйте поискать простую потребительскую проблему производителя читателя писателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...