我正在开发GUI。这是代码(ActionListener
一个Button
,timer
一个。我有一个逐个显示的图像列表。按下stop
按钮,我应该停止计时器并显示当前图像。在按下next
按钮时,我应该显示下一张图像。
这是Progressive Image Transmission
上代码的一部分,这意味着按照清晰度(分辨率)的顺序显示每个当前图像。这是侦听器为每个图像执行的处理程序操作。
问题:
单击停止时,计时器不会停止,而是停止动作监听器进一步创建更多计时器。(注意:下一步和停止共享相同的动作监听器)
点击下一步,需要停止当前运行的计时器,并且需要启动一个新的计时器。 (注意:我使用了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();
}
}
}