我尝试使用undo button做一个stack,这样它将消除应用的效果,例如blur等,但是当我尝试pop out存储在image中的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");
  }
}


撤消方法:

if (e.getSource() == undoimageitem) {
  BufferedImage temp = (BufferedImage) Imagesteps.pop();
  Icon icon = new ImageIcon(temp);
  lblImage.setIcon(icon);
  statusBar.setText("Undo");
}

最佳答案

从异常中您似乎正在尝试从空堆栈中弹出。为避免发生此错误,理想情况下,您应该在弹出之前确保堆栈的大小至少大于或等于1。

至于为什么要得到例外,原因可能很多。这些是我想到的两个:


您将在推送项目和将项目从堆栈中弹出之间的代码中的某个时刻重新初始化/清除堆栈。
假设像大多数按钮一样,该方法是通过单击激活的,则您双击该按钮,从而导致事件触发两次,这可能导致执行两次弹出操作的代码导致问题。

关于java - JAVA Stack Pop Error,尝试创建撤消,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10414367/

10-11 22:38
查看更多