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