当我尝试运行它时,我不断得到一个无法关闭的空框架,我必须从eclipse中终止程序。我相当肯定问题是while循环的结果(约占代码块的2/3),但我还没有找到解决这个问题的方法
public Draw()
{
super( "Uno");
JMenuBar bar = new JMenuBar(); // create menu bar
JMenu gameMenu = new JMenu( "Play Game" );
JMenu quitMenu = new JMenu( "Quit" ); //Quit Program
bar.add( gameMenu ); // add Add menu to menu bar
bar.add( quitMenu ); // add quit button to menu bar
setJMenuBar( bar ); // set menu bar for this application
window = new JDesktopPane();
add(window);
gameMenu.addMouseListener(
new MouseListener()
{
public void mouseClicked(MouseEvent e)
{
Dimension size = window.getSize();
double height = size.getHeight();
double width = size.getWidth();
JInternalFrame frame = new JInternalFrame("Uno", true, true, true, true );
JFrame input = new JFrame();
input.setTitle(" ");
input.setSize(350, 155);
input.setLayout(new FlowLayout());
input.setLocationRelativeTo(null);
input.setVisible(true);
JLabel label1 = new JLabel("How many total players? (2-10)");
final JTextField text1 = new JTextField(3);
JLabel label2 = new JLabel("How many computer players? *");
final JTextField text2 = new JTextField(3);
JLabel label3 = new JLabel("* Computer players must be <= total number of players");
JButton confirm = new JButton("OK");
label1.setVisible(true);
label2.setVisible(true);
label3.setVisible(true);
text1.setVisible(true);
text2.setVisible(true);
confirm.setVisible(true);
input.add(label1);
input.add(text1);
input.add(label2);
input.add(text2);
input.add(label3);
input.add(confirm);
while(valid == false)
{
confirm.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String players = text1.getText();
String computers = text2.getText();
int temp1 = Integer.parseInt(players);
System.out.println("Number of players = " + temp1);
int temp2 = Integer.parseInt(computers);
System.out.println("Number of computers = " + temp2);
if (temp1 >= 2 && temp1 <= 10)
if (temp2 <= temp1 && temp2 >= 0)
valid = true;
} //close actionPerformed
}); //close ActionListener
} //close while loop
} //close mouseClicked
} //close mouseListener
} //close Draw
最初,我遇到了一个问题,即它一直无限地将帧绘制在自身之上,因为while循环保持返回false。这个问题是通过从while循环中删除组件并将它们放在它们之前来解决的。现在,当我运行它时,我得到的只有:picture
这个程序的目标是制作一个Uno游戏,但第一步是确定玩家的数量。这是我知道如何做到这一点的唯一方法,这只是我用图形完成的第二个程序,所以我绝不是Java的专家。我会感激任何帮助,因为我已经被困了几天了。
答案 0 :(得分:0)
问题是你没有给事件处理者任何机会完成他们的工作。您的while循环不断创建事件处理程序。但是,永远不能调用actionPeformed()
方法,因为while循环控制了CPU,按钮不会响应任何点击。
我建议你学习更多关于事件处理的知识。您需要重新设计代码才能获得所需的行为。很可能你需要完全删除while循环,只需创建一个事件处理程序,它将在单击按钮时执行代码。
供将来参考:
通常,不需要使用布尔值检查相等性。 ==
的结果是bool,但您检查的变量已经是bool
。因此,直接使用它:代替while (valid == false)
,您可以while (!valid)
。如果您将!
视为&#34;而不是&#34;,这实际上很有意义。
在这种情况下,这一点没有实际意义,因为你需要完全删除while循环。但是,这对您来说可能是一些有用的信息。