Salve a tutti,
sto sviluppando un programmino per giocare a carte. Stando ad implementare l'interfaccia grafica con Javafx non riesco a capire come, in base al turno di gioco, si possa scegliere una carta e restituirne il valore.
A linea di comando è semplice perché il programma attende fino a che il buffer ( BufferedReader(new InputStreamReader(System.in)) ) non riceve qualcosa, sto trovando difficoltà con la Gui.
Cioè, quando è il turno del giocatore non posso mettere un while(true) aspettando che accada un evento (pressione di un tasto(una carta) sulla gui) perché il programma va in attesa attiva e non risponde più.
Vorrei sapere se debbo implementare un meccanismo usando i thread e se potete indirizzarmi verso qualche sito idoneo.
Grazie
Qualche linea di codice:
@Override
	public Entry<Integer,CardInterface> chooseCard() {
		Entry<Integer,CardInterface>  card=null;
		
		//se viene usata la Gui java fx
		if(Coordinator.getInstance().getGuiOrNot()) {
			Coordinator.getInstance().getTurno().showCardsInHand();
			//si deve ritornare un valore preso da una tasto dalla gui
			
			//TODO
			
			
		}
		//altrimenti a linea di comando
		else {
			System.out.println("/*---turno del realplayer---*/\n");
			
			Coordinator.getInstance().getTurno().showCardsInHand().showDeck().entrySet().parallelStream().forEach(cards->
				System.out.print(cards.getKey()+")"+cards.getValue().printCard()+"\n"));
			
			System.out.println("\n/*---carte in tavola---*/\n");
			
			Dealer.getInstance().getCardTable().showDeck().entrySet().parallelStream().forEach(cards->
				System.out.print(cards.getValue().printCard() ));
			
			System.out.println("\nScegliere una carta\n");
			while(card==null) {
				card=cardExists();
			}
		}	
		return card;
	}
	
	/**Viene controllato se il dato inserito da tastiera é valido<br>
	 * e se la carta esiste nella mano del giocatore
	 * @return La carta scelta dal giocatore
	 * @throws IOException 
	 * @see {@link CardInterface}
	 * @see {@link Player}
	 * @see {@link StrategyInterface}
	 */
	private Entry<Integer,CardInterface> cardExists(){
		
		Entry<Integer,CardInterface>  card=null;
		BufferedReader tastiera=null;
		
			while(card==null) {
				try {
					tastiera=new BufferedReader(new InputStreamReader(System.in));
					card=Coordinator.getInstance().getTurno().getCardFromHand(Integer.parseInt(tastiera.readLine()));
			
				if(card==null)System.out.println("Elemento non presente,ricontrolla");
				} catch (IndexOutOfBoundsException | IOException | NumberFormatException e) {
					System.out.println("Elemento non presente,ricontrolla");
				}
			}
			
		return card;
	}