繁体   English   中英

Java异常:java.lang.ClassCastException:javax.swing.Timer无法转换为javax.swing.JButton

[英]Java exception: java.lang.ClassCastException: javax.swing.Timer cannot be cast to javax.swing.JButton

我真的不明白这个运行时错误:

java.lang.ClassCastException:无法将javax.swing.Timer强制转换为javax.swing.JButton。

这是我的代码:

timer = new Timer(DELAY, new ButtonListener());

private JButton[] buttons = new JButton[3];
buttons[0] = new JButton("Circle");
buttons[1] = new JButton("Start");
buttons[2] = new JButton("Stop");

for(JButton button : buttons){
  button.addActionListener(new ButtonListener());
  controlPanel.add(button);
}

public void actionPerformed(ActionEvent e){
 JButton button = (JButton) e.getSource();

 if(button.getText().equals("Start")){
    timer.start();
 }else 
  if(button.getText().equals("Stop")){
    timer.stop();
 }else
  if(button.getText().equals("Circle")){
    shapes[count] = new Circle();
    drawPanel.repaint();
    count++;
 }
}

下一行中的问题JButton button = (JButton) e.getSource(); actionPerformed()方法中。 因为您将ButtonListener添加到JButtonTimer 您可以为它们使用不同的侦听器,或者可以验证e.getSource();类型e.getSource(); actionPerformed()

摇摆计时器也可以触发动作事件。 您只需要在代码中进行类检查:

public void actionPerformed(ActionEvent e){


    if (e.getSource() instanceof (JButton)) {

        JButton button = (JButton) e.getSource();

        if(button.getText().equals("Start")){
            timer.start();
        }else
        if(button.getText().equals("Stop")){
            timer.stop();
        }else
        if(button.getText().equals("Circle")){
            shapes[count] = new Circle();
            drawPanel.repaint();
            count++;
        }


    }else (e.getSource() instanceof (Timer)) {
        //deal with timer
    }
}

在您的actionPerformed方法中,检查e.getSource()是否为JButton的实例,否则不进行处理

public void actionPerformed(ActionEvent e){
     if(e.getSource() instanceof JButton){
          // your button action logic
     }
}

不要对JButtonsJTimer使用相同的侦听器类。 为您的计时器创建一个单独的侦听器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM