Из того, что я вижу, есть одна из двух возможных проблем.Наиболее вероятная проблема заключается в том, что вы начинаете с h = 0, а затем заканчиваете h = строкой (поскольку ваш цикл while выполняет итерацию, в то время как h <= row). </p>
Скажем, например, у вас есть 3 строки в таблице.Этот цикл теперь будет выполняться для h = 0, h = 1, h = 2 и h = 3, т.е. он выполняется 4 раза, но у вас есть только 3 строки (с индексами 0, 1 и 2 нет строки с индексом 3).Это приведет к исключению нулевого указателя на его последней итерации.Это поведение, которое вы видите?
Чтобы разобраться, просто установите условие цикла while h
Другая проблема заключается в том, что вы по-прежнему увеличиваете h, даже если проверяемая строка удаляется.Если мы проверяем строку 1, а затем удаляем строку 1, тогда строка 2 станет строкой 1, поэтому нам нужно перепроверить эту новую строку 1. Таким образом, вы должны увеличивать h, только если текущая строка, которую вы проверяете, не удалена.
Наконец, отметим, что если вы используете один из более поздних JDK, нет необходимости вызывать booleanValue () (это называется ненужной распаковкой).Это будет сделано автоматически для вас.Таким образом, вы можете изменить следующее:
chk= ((Boolean)jTMezziInt.getValueAt(h, 6)).booleanValue();
на:
chk= (Boolean)jTMezziInt.getValueAt(h, 6);
Это просто аккуратнее и лучше.