Ok rozwijam sobie program do wyłączania kompa. Dodać chciałem timer, który pokazuje mi czas w minutach pozostały do wyłączenia komputera. I w przypadku jednorazowego naciśnięcia działa wszytko ok jednak gdy chcemy zmienić czas to nie działa. Z wątkami dopiero zaczynam i przypuszczam, że jest dalej gdzieś rozwiązanie takiego problemu jednak chciałbym spróbować to zrobić z aktualną wiedzą. Mianowicie zrobiłem klasę Timer uruchamiającą wątek który ma "ifa" z flagą jeżeli flaga się zmienia to wchodzimy do "ifa" i ustawiamy nowy czas wyłączenia komputera jeżeli nie to przechodzimy dalej do odliczania. Problem polega na tym, że o ile tworzenie obiektu wątku miałem w przycisku dla jednego przypadku to działało jednak gdy chciałem, żeby wątek był uniwersalny dla wszystkich przycisków i sprawdzał flagi i czas który pobierał do wyłączenia to się sypie teraz. Mianowice jak ustawie to tak:
zmienne wątku:
private boolean flag =true; //ja true to wchodzi do ifa i zmeinia czas wylaczenia
private int allMinute2 = 0; // czas aktualny w minutach
private int endMinute = 0; // czas w ktorym wylaczy sie komputer
kod wątku:
public void run() {
Core core2 = new Core();
// Calendar calendar = new GregorianCalendar();
while (true) {
Calendar calendar = new GregorianCalendar();
//TODO: tu flage zrobic: ze jak sie jest true to ustawia godzine a jak nie to nie ustawia godziny i odlicza tylko
if(flag){
int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int allMinute = minute + 60 * hourOfDay;
endMinute = allMinute + Integer.parseInt(new Core().getCzas());
System.out.println("jestesmy w ifie");
}
System.out.println(endMinute);
int hourOfDay2 = calendar.get(Calendar.HOUR_OF_DAY);
int minute2 = calendar.get(Calendar.MINUTE);
allMinute2 = minute2 + 60 * hourOfDay2;
// w linijce poniżej wyskakuje NullPointException
gui.getjLabel2().setText(Integer.toString(endMinute - allMinute2));
gui.repaint();
try {
Thread.sleep(10000);
} catch (Exception ek) {
}
}
}
zmienn GUI:
jeżeli tą linijkę wkleję do kodu przycisku (kod poniżej) to dziła wtedy ale tylko dla tego jednego przycisku
Timer t = new Timer(this);
kod GUI:
t.setFlag(true);
core.setCzas("30");
core.abortOff();
core.shutdown(30);
t.setFlag(false);
Jak rozwiązać ten problem i dlaczego wyskakuje mi ten NullPointEx..
Słyszałem o czymś takim jak nasłuchiwanie wątków co pewnie rozwiązuje mój problem ale nadal nie wiem czemu mi ten błąd wyskakuje bo wydaje mi się, że powinno działać ;d