приложение зависает(замедляется) после часа работы
Я написал приложение, которое должно работать в фоновом режиме. Но после часа работы оно начало зависать. Во первых мне интересно, Есть ли способы оптимизировать программу(что-то по типу объявления переменных единожды). А во вторых стоит ли так реализовывать потоки(единственное в чём я не разбираюсь в моём коде).
//определение потока вывода информации проекта 1
private static Thread resetInfoThread;
private static Runnable resetInfoRunnable;
public static void resetInfo() throws IOException {
resetInfoRunnable = new Runnable() {
FrameHandler fh = new FrameHandler();
@Override
public void run() {
try{
while(true) {
fh.setInfo();
Thread.sleep(1000);
}
}catch (Exception ex) {
System.err.println(ex.getMessage());
}
}
};
resetInfoThread = new Thread(resetInfoRunnable);
resetInfoThread.start();
}
//определение потока проверки и изменения информации проекта 1
private static Thread checkInfoThread;
private static Runnable checkInfoRunnable;
public static void CACInfo()
{
checkInfoRunnable = new Runnable() {
@Override
public void run() {
try{
//определяем входные и переменные
InfoHandler infoHandler = new InfoHandler();
String[] currencies = InfoHandler.currenties;
ArrayList<String> rates = new ArrayList<String>();
int index;
//бул проверяющий на изменения
boolean isChangeExist;
String[] lastString;
while(true){
isChangeExist = false;
try{
//читаем из файла, и сравниваем с тем, что находится в другом источнике
lastString = FileHandler.read().get(FileHandler.read().size() - 1).split(" ");
index = 0;
rates.clear();
for (String current:
currencies) {
index++;
rates.add(infoHandler.getInfo(current));
if(!lastString[index+5].equals(infoHandler.getInfo(current))){
isChangeExist = true;
System.out.println(lastString[index+5] + "!=" + infoHandler.getInfo(current));
}
}
//если в источнике произошли изменения, записываем в файл
if (isChangeExist){
FileHandler.write(new Date().toString(),rates);
}
//спим
Thread.sleep(1000);
//если файл пуст, выполняем другое условие
}catch (IndexOutOfBoundsException ex){
index = 0;
rates.clear();
for (String current:
currencies) {
index++;
rates.add(infoHandler.getInfo(current));
ex.printStackTrace();
}
FileHandler.write(new Date().toString(),rates);
System.err.println("chto-to strannoe proishodit");
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
};
checkInfoThread = new Thread(checkInfoRunnable);
checkInfoThread.start();
}
Ответы (1 шт):
Автор решения: виктор чернов
→ Ссылка
Просто надо было чистить таблицу от панелей:
jPanel.removeAll();
Не тупите как я.