Cześć, piszę aplikację desktopową w netbeans, składa się ona z kilku komponentów, jFrame, mainPanel, jTabbedPane, mam pytanie jak zrobić aby aplikacja po załadowaniu(czyli załadowaniu się wszystkich komponentów) zamknęła się po x sekundach ?
Thread.sleep(long millis) ?
Dokładnie - po załadowaniu wszystkiego uruchamiasz watek i od razu go usypiasz na tyle ile chcesz. Jak wątek się skończy dajesz dispose na komponentach i system.exit
Ale jak mam sprawdzić czy już wszystkie komponenty się zainicjowały ?
Mam funkcję initComponent() - w niej deklaracje komponentów.
Następnie w konstruktorze wywołuję tą funkcję i wywołuję Thread.sleep(3000) System.exit(0), i wygląda to tak że po uruchomieniu aplikacji w ogóle nie widzę komponentów program jest zamykany, a chodzi mi oto żeby komponenty przez te 3 sekundy były widziane.
po stworzeniu okna, zatrzymujesz wątek, zanim wyświetli te okno, a potem od razu wyłączasz program. Zrób tak, jak powiedział lipkerson, zrób to w osobnym wątku.
class watekWylaczajacy implements Runnable {
Frame obiekt;
watekWylaczajacy (Frame obiekt) {
this.obiekt = obiekt;
}
public void run() {
Thread.sleep(3000);
obiekt.dispose();
System.exit(0);
}
}
a odpalasz to:
(...)
initComponents();
new Thread(new watekWylaczajacy(this)).start();
(...)
Pisałem na szybko, mogą być małe błedy.
Można też skorzystać z klasy Robot i na końcu konstruktora umieścić takie coś:
try
{
Robot robot=new Robot();
robot.delay(5000);
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_F4);
robot.keyRelease(KeyEvent.VK_F4);
robot.keyRelease(KeyEvent.VK_ALT);
}
catch(Exception e)
{
System.out.println(e);
}
Tylko robot zadziała wtedy tylko gdy okno jest aktywne. Jak ktoś da alt tab albo do ikony do już się nie zamknie.
True, ale emocje wywołane pytaniem "jaki program się tym razem zamknie" bezcenne. ;-)
Chyba nie ma siły by Java mogła zamknac coś. Hmm...sprawdze w domu jak to z tym jest.
Nie doceniasz Javy.