Java 如何停止摆动计时器

Java 如何停止摆动计时器,java,swing,animation,timer,actionlistener,Java,Swing,Animation,Timer,Actionlistener,我正在开发GUI。这是代码(一个ActionListener用于按钮,另一个用于计时器)。我有一个图像列表要逐一显示。按下stop按钮时,我应该停止计时器并显示当前图像。按下next按钮时,我将显示下一幅图像 这是渐进式图像传输上代码的一部分,这意味着按清晰度(分辨率)顺序显示每个当前图像。这是处理程序操作侦听器对每个图像所做的操作 问题: 单击stop,计时器不会停止,而是stop的动作侦听器会进一步创建更多计时器(注意:Next和stop共享相同的动作侦听器) 单击“下一步”,需要停止当前

我正在开发GUI。这是代码(一个
ActionListener
用于
按钮
,另一个用于
计时器
)。我有一个图像列表要逐一显示。按下
stop
按钮时,我应该停止计时器并显示当前图像。按下
next
按钮时,我将显示下一幅图像

这是渐进式图像传输上代码的一部分,这意味着按清晰度(分辨率)顺序显示每个当前图像。这是处理程序操作侦听器对每个图像所做的操作

问题:

  • 单击stop,计时器不会停止,而是stop的动作侦听器会进一步创建更多计时器(注意:Next和stop共享相同的动作侦听器)

  • 单击“下一步”,需要停止当前正在运行的计时器,并启动新的计时器。(注意:我使用了timer.restart(),但它也不起作用)

我们将不胜感激

public void actionPerformed(ActionEvent arg0) {
    int threads=0;

    System.out.println("Listening : "+arg0.getActionCommand());
    if(arg0.getActionCommand().equals("Send")){
        stopButton.setEnabled(true);
        nextButton.setEnabled(true);
    }
    else if(arg0.getActionCommand().equals("Stop")){
        timer.stop();
        saveButton.setEnabled(true);
        stopButton.setEnabled(false);
    }
    else if(arg0.getActionCommand().equals("Next")){
        stopButton.setEnabled(true);
        saveButton.setEnabled(false);
        timer.restart();
    }
    try {
        image = ImageIO.read(new File(pathName[imageNo])).getScaledInstance(512,512 , BufferedImage.SCALE_SMOOTH);

    }catch (IOException e) {
        e.printStackTrace();
    }
    senderImage = new ImageIcon(image);
    senderImageLabel.setIcon(senderImage);
    senderFrame.setVisible(true);

    ImageToMatrix(getImage(pathName[imageNo]));
    Compress();
    k=senderMatrix.length-1;
    imageR=Decompress(k);
    imageR=imageR.getScaledInstance(512, 512, BufferedImage.SCALE_SMOOTH);
    receivedImage = new ImageIcon(imageR);
    receiverImageLabel.setIcon(receivedImage);
    receiverFrame.getContentPane().add(BorderLayout.EAST,receiverImageLabel);
    receiverFrame.setVisible(true);

    Handler handler = new Handler();
    timer = new Timer(1000,handler);
    timer.start();
    sendButton.setEnabled(false);

    imageNo = (imageNo+1)%5;
}
class Handler implements ActionListener{
    public void actionPerformed(ActionEvent arg0) {
        System.out.println("image: "+imageNo+"  matrix:"+k );
        k-=1;
        imageR=Decompress(k);
        imageR=imageR.getScaledInstance(512, 512, BufferedImage.SCALE_SMOOTH);
        receivedImage = new ImageIcon(imageR);
        receiverImageLabel.setIcon(receivedImage);
        receiverFrame.getContentPane().add(BorderLayout.EAST,receiverImageLabel);
        receiverFrame.setVisible(true);
        if(k==0){
            timer.stop();
        }
    }

}

您正在使用哪个计时器类?为什么要在执行的
操作中创建新计时器?使用相同的计时器。没错@peeskillet。。这就解决了问题