0

などの適用された効果を削除するようにundo button使用しようとしていますが、何か問題が発生したときに保存しようとすると、助けてください、よろしくお願いします!.stackblurpop outimagestack

適用効果:

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");
}
4

1 に答える 1

1

取得している例外から、空のスタックからポップしようとしているようです。このエラーを回避するには、理想的には、ポップする前に、スタックのサイズが少なくとも 1 以上であることを確認する必要があります。

例外が発生する理由については、多くの理由が考えられます。思いつくのは次の2つです。

  • アイテムのプッシュとスタックからのポップの間のコードのある時点で、スタックを再初期化/クリアしています。

  • ほとんどのボタンと同様に、メソッドが 1 回のクリックでアクティブ化されると仮定すると、ボタンをダブルクリックしているため、イベントが 2 回発生し、コードが 2 つの pop 操作を実行して問題が発生する可能性があります。

于 2012-05-02T13:26:36.647 に答える