2015-04-08 3 views
0

Я пытаюсь сделать игру, и в указанной игре есть 21 палочка, и каждый человек по очереди принимает 1-4 палочки, пока не осталось никаких палочек, если вы не можете больше палочки ты проиграл. Я успешно сделал эту программу в eclipse, но теперь я хочу добавить в нее графический интерфейс, поэтому мне нужно изменить код. Этот код не является полным, но он сбрасывается всякий раз, когда я нажимаю кнопку Go, которая является моим листом actionListener. Я бы набрал номер в текстовое поле, нажмите «идти», и он просто сработает. Как я могу это исправить?Базовая программа GUI java в Eclipse продолжает сбой

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 

public class Sticks extends JFrame { 

JButton Go; 
JTextField tf1, tf2; 
static JTextField sttf; 
JLabel startTake; 
static JLabel errorTake; 
JLabel uTake; 
JLabel compTake; 

public Sticks() { 
    setLayout(new GridLayout(5, 2, 5, 5)); 

    startTake = new JLabel("How many sticks do you want to take? (1-4)"); 
    add(startTake); 

    sttf = new JTextField(); 
    add(sttf); 

    errorTake = new JLabel("Hello"); 
    add(errorTake); 

    Go = new JButton("Go"); 
    add(Go); 

    uTake = new JLabel(""); 
    add(uTake); 

    compTake = new JLabel(""); 
    add(compTake); 

    // tf1 = new JTextField(); 
    // add(tf1); 

    // TakeP = new JLabel("One stick taken"); 
    // add(TakeP); 

    event e = new event(); 
    Go.addActionListener(e); 
} 

public static class event implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 

     int numSticks = 21; 
     int numToTake = 0; 
     int randomNum = 0; 

     while (numSticks > 0) { 
      try { 
       int num = (int) (Double.parseDouble(sttf.getText())); 
       int NumSticks = numSticks - num; 

        errorTake.setText("There are: " + numSticks + " left"); 

        Robot Rob = new Robot(); 
        numToTake = (int)Math.random() * 4 + 1; 
        errorTake.setText("There are: " + numSticks + " left"); 
       } 
      catch (Exception ex) { 
       ex.printStackTrace();;errorTake.setText("There is a problem"); 
      } 
     } 
    } 
} 

public static void main(String[] args) { 
    Sticks gui = new Sticks(); 
    gui.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    gui.setVisible(true); 
    gui.setSize(600, 200); 

    gui.setTitle("Nice Game"); 
} 
} 
+0

Изменить 'catch (Exception exx) {errorTake.setText (" Только числа! ");' To 'catch (Exception exx) {exx.printStackTrace(); errorTake.setText ("Только числа!"); 'Затем копировать/вставлять вывод исключений. –

+0

Я не получаю stackTrace –

ответ

0

Everytime нажать кнопку «Go», ваши actionPerformed пожары, и не ждать ввода пользователя на всех. Это ваша проблема.

public static class event implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     //... 
       int num = (int) (Double.parseDouble(sttf.getText())); 
     //... 
    } 
} 

sttf.getText() всегда возвращает "", потому что sttf пуст, программа не ожидает ввода пользователя, в отличие от сканера (System.in).

Имеет смысл, что вы не получаете никаких Исключений, потому что он просто запускает и заканчивает игру, не давая пользователю достаточно времени для ввода чего-либо. Вы уверены, что консоль не печатает «Номера только!», Хотя? Потому что я никогда не пытался разобрать пустую строку раньше.


Хорошо, я читал все это неправильно, извините.

Ваш actionListener генерирует новую игру каждый раз, когда вы нажимаете ее, потому что вы устанавливаете numSticks по 21 при каждом нажатии. Заглядывая вперед, я не думаю, что это хорошая идея, если вы не хотите взять столько же палочек до конца игры. То же самое стоит. Если вы введете значение в sttf, программа не будет ждать, пока вы его измените, потому что он будет продолжать использовать это значение до тех пор, пока не закончится цикл while.

+0

Вы видите, что я ничего не получаю. Когда я запускаю программу, открывается окно java, и я ввожу значение в текстовое поле и нажимаю go, и оно просто перестает работать. –

+0

О, понял. Редактирование моего ответа. – theguywhodreams

+0

Под «перестает работать», вы имеете в виду, что он замерзает? Потому что это, скорее всего, означает, что вы находитесь в бесконечном цикле. – theguywhodreams