Я читал где-то еще, что вы можете попробовать - поймать java.lang.OutOfMemoryError и в блоке catch вы можете освободить все ресурсы, которые, как вы знаете, могут использовать много памяти, закрыть соединения и т. Д., Затем выполнить System.gc()
затем попробуйте все, что вы собирались сделать.
Другой способ заключается в том, что, хотя я не знаю, сработает ли это, но в настоящее время я проверяю, сработает ли это в моем приложении.
Идея состоит в том, чтобы выполнить сборку мусора, вызвав System.gc (), который, как известно, увеличивает свободную память. Вы можете продолжать проверять это после того, как исполняется код памяти.
//Mimimum acceptable free memory you think your app needs
long minRunningMemory = (1024*1024);
Runtime runtime = Runtime.getRuntime();
if(runtime.freeMemory()<minRunningMemory)
System.gc();
Чтобы настроить внешний вид ячеек JList
, вам необходимо написать ваша собственная реализация ListCellRenderer
.
Пример реализации класса
может выглядеть следующим образом: (грубый набросок, не тестировался)
public class MyListCellThing extends JLabel implements ListCellRenderer {
public MyListCellThing() {
setOpaque(true);
}
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
// Assumes the stuff in the list has a pretty toString
setText(value.toString());
// based on the index you set the color. This produces the every other effect.
if (index % 2 == 0) setBackground(Color.RED);
else setBackground(Color.BLUE);
return this;
}
}
Для использования этого средства визуализации в вашем Конструктор JList
поместил этот код:
setCellRenderer(new MyListCellThing());
Чтобы изменить поведение ячейки в зависимости от выбранной и имеющей фокус, используйте предоставленные логические значения.