我尝试使用undo button
执行stack
,以便删除应用的效果,例如blur
等,但是当我尝试pop out
image
时1}}我存储在stack
出错了,请帮助我,提前谢谢!
应用效果:
if (e.getSource() == btnGrayscale) {
if (buffImage != null) {
Imagesteps.push(buffImage);
ImageEffects ie = new GrayscaleEffect();
buffImage = ie.GrayscaleEffect(buffImage);
Icon icon = new ImageIcon(buffImage);
lblImage.setIcon(icon);
statusBar.setText("Image is now Grayscaled");
}
}
UNDO方法:
if (e.getSource() == undoimageitem) {
BufferedImage temp = (BufferedImage) Imagesteps.pop();
Icon icon = new ImageIcon(temp);
lblImage.setIcon(icon);
statusBar.setText("Undo");
}
答案 0 :(得分:1)
从您获得的异常看来,您正试图从空堆栈中弹出。为避免此错误,理想情况下,在弹出之前,请确保堆栈的大小至少大于或等于1.
至于你获得例外的原因,原因可能很多。我想到的有两个:
在推送项目并从堆栈弹出项目之前,您正在代码中的某个位置重新初始化/清除堆栈。
假设像大多数按钮一样,只需单击一下即可激活该方法,您双击该按钮,从而导致事件触发两次,这可能导致代码执行两次弹出操作,导致问题。