当窗口加载时,JButton已经选择了 - 无限循环

时间:2015-05-06 17:50:16

标签: java while-loop jbutton infinite-loop

我有一个JButton数组,当它加载时会显示在窗口上。 出于某种原因,当窗口加载时,第一个按钮似乎已被选中,因此我的程序进入无限循环。

我知道要停止这个无限循环,我应该改变while(true)循环中的条件,但不确定要放入什么条件。 所以我认为另一种方法是弄清楚为什么其中一个按钮已被选中。

actionPerformed方法 - 这将获取所选按钮的名称,我将其作为表示坐标的字符串。然后它将坐标转换为整数,这些整数可以由HumanPlayer类使用getXInt和getYInt方法获得。董事会和部分已经在其他类中设置,我知道这一切都有效,因为我已经创建了一个文本版本,现在这是我正在处理的GUI版本。 这只是一个允许用户选择一个按钮而没有while(true)循环卡住的情况。

屏幕类:

public void actionPerformed(ActionEvent e) {
    JButton piece = (JButton) e.getSource();        
    String xy = piece.getName();
    String x = xy.substring(0,1);
    String y = xy.substring(2,3);

    xInt = Integer.parseInt(x);
    yInt = Integer.parseInt(y);
}

public int getXInt() {
    return xInt;
}

public int getYInt() {
    return yInt;
}

HumanPlayer类,它获取所选作品的信息并检查是否可以移动。

//Sets up new instance of Screen class which is where the window displaying the buttons is set up (this contains the getXInt and getYInt methods are- so the HumanPlayer class can retrieve the piece which has been selected.
Screen s = new Screen(board);

public boolean makeMove() {

    int fromXCo , fromYCo, toXCo, toYCo;
    Piece p;

    ArrayList<Move> moves = null;

while (true){

    //reads x and y co-ordinate
    System.out.println("Click on a piece to move");
    //takes information from which button is clicked from other class
    fromXCo = s.getXInt();
    fromYCo = s.getYInt();

    p = board.getPiece(fromXCo, fromYCo);
    System.out.println("Your selected piece is " + p.getChar());
    //looks through available moves for piece
    moves = p.availableMoves();
    //if no moves available, asks for new co-ordinates.
    if (moves == null) 
    {
        System.out.println("No moves available for this piece \n");
        continue;           
    }
    break;
}

所以输出是连续的:

  • 点击要移动的部分
  • 您选择的作品是
  • 这件作品没有可用的动作......

0 个答案:

没有答案