Java ActionListener和event.getSource()
我在Java代码中经常遇到问题。 每当我尝试在程序中使用按钮时,它们都不起作用,我认为问题出在event.getSource()上,但我找不到它。 这是我的完整代码:Java ActionListener和event.getSource(),java,Java,我在Java代码中经常遇到问题。 每当我尝试在程序中使用按钮时,它们都不起作用,我认为问题出在event.getSource()上,但我找不到它。 这是我的完整代码: import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class Safe extends JFrame implements ActionListener{ privat
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class Safe extends JFrame implements ActionListener{
private JButton b1, b2, b3;
private JTextField display;
private JLabel displayLabel;
private int[] pass = new int[5];
private int hits = 0;
public static void main(String[] args){
Safe frame = new Safe();
frame.setSize(250, 100);
frame.createGUI();
frame.setVisible(true);
}
private void createGUI(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container window = getContentPane();
window.setLayout(new FlowLayout());
b1 = new JButton("1");
window.add(b1);
b1.addActionListener(this);
b2 = new JButton("2");
window.add(b2);
b2.addActionListener(this);
b3 = new JButton("3");
window.add(b3);
b3.addActionListener(this);
displayLabel = new JLabel("Enter 6 digit combination:");
window.add(displayLabel);
display = new JTextField(6);
window.add(display);
}
public void actionPerformed(ActionEvent event){
int i;
int[] user = new int[5];
if(hits == 0){
pass[0] = 1;
pass[1] = 1;
pass[2] = 1;
pass[3] = 1;
pass[4] = 1;
pass[5] = 2;
}
for(i=0;i<5;i++){
if(event.getSource() == b1){
display.setText("1");
user[i] = 1;
}
else if(event.getSource() == b2){
display.setText("2");
user[i] = 2;
}
else if(event.getSource() == b3){
display.setText("3");
user[i] = 3;
}
}
i = -1;
do{
i++;
if(pass[i] != user[i]){
JOptionPane.showMessageDialog(null,"Incorrect Code! Try Again!");
}
if(i == 5){
JOptionPane.showMessageDialog(null,"Correct Code!");
}
}while(pass[i] == user[i]);
}
}
数组索引是基于0的,因此索引5实际上是不存在的第6个条目。因此,请摆脱该语句。运行该语句时会发生什么?是否有任何错误?什么是预期行为,什么是实际行为?当您运行它时,它会给出此错误(并非全部错误)@Reimeus异常,在线程“AWT-EventQueue-0”java.lang.ArrayIndexOutOfBoundsException:5 at Safe.actionPerformed(Safe.java:53)at javax.swing.AbstractButton.fireActionPerformed(未知源)javax.swing.AbstractButton$Handler.actionPerformed(未知源代码)at javax.swing.DefaultButtonModel.fireActionPerformed(未知源代码)去掉:pass[5]=2;现在我可以按b2和b3,但当我按1时,在CMD上出现了相同的错误。@JoséAstrain,你删除了错误的语句。我对需要删除的语句进行了注释。已删除:pass[5]=2;现在我可以按b2和b3,但当我按b1时,CMD上会出现相同的错误。所以请修复您的逻辑错误。错误消息会告诉您是哪条语句导致了问题。添加一些System.out.println(…)语句以查看“I”的值。然后找出为什么“I”的值大于4。如果你想编程,你需要学会调试你自己的逻辑。我们不知道您的逻辑试图做什么,因此我们不能推荐一种解决方案,只能说不要让“I”的值大于4。顺便说一下,您的标签上写着:“输入一个6位数的组合”。因此,如果您真的需要6位数字,那么数组的大小需要是6,并且您需要添加回刚才注释掉的语句。再次,理解给你的答案的“概念”。只有您确切地知道您的程序正在尝试做什么。
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 5
at Safe.actionPerformed(Safe.java:53)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
int[] user = new int[5];
...
//pass[5] = 2;