Вы сравниваете классы вашего входного параметра и внутренних кадров ваших рабочих столов в цикле for. Это всегда будет верно, поскольку ваш параметр является экземпляром JInternalFrame, а метод getAllFrames возвращает массив JInternalFrames. Почему бы просто не сделать регулярное сравнение? :
ShoppyPOSApp.frame.mainDesktopPane.getAllFrames()[i] == internalFrame
Я бы рекомендовал использовать HIDE_ON_CLOSE
в качестве операции закрытия по умолчанию на кадрах и использовать setVisible(false)
в качестве ключевого слушателя вместо dispose()
. Когда кадры расположены, они закрыты, и вы не должны пытаться повторно использовать кадр после его закрытия. Если вы просто скроете рамку, она все равно будет дочерней по отношению к панели рабочего стола, поэтому вы должны добавить вызов к setVisible(true)
, когда найдете рамку в вашем методе setInternalFrame
.
Звучит так, как будто вы получаете непоследовательное поведение (вы говорите, что оно терпит неудачу после двух или трех утилизации). Это говорит о том, что у вас есть проблема с потоком событий. Ваш setInternalFrame вызывается в потоке событий? Вы знакомы с Thread Dispatch Thread и используете ли вы его правильно?