Witajcie!
Pracuję nad aplikacją do uruchamiania testów automatycznych. W aplikacji zostało zaimplementowanie uruchamianie się określonego zdarzenia (metody) o zadanej przez użytkownika godzinie. Oczywiście zakładam, że aplikacja musi być uruchomiona w momencie włączenia się testu. Piszę tak na prawdę w sprawie porady - to co napisałem działa, ale według mnie to jest bardzo toporna metoda. Chciałem wam przedstawić wycinek z całego kodu programu, który jest odpowiedzialny za uruchomienie metody o określonej porze:
if(comboBox.getSelectedIndex() == 1) {
test.setTestType("Moduł Obrony");
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try {
test.defenceTestSet();
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
}
}
};
Timer t = new Timer(delay, taskPerformer);
t.setRepeats(false);
t.start();
} if(comboBox.getSelectedIndex() == 2) {
test.setTestType("Moduł Logowania");
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
test.loginTestSet(uni, login, pass);
}
};
Timer t = new Timer(delay, taskPerformer);
t.setRepeats(false);
t.start();
}
Mały komentarz do kodu: W zależności od wybranej opcji JComboBoxa uruchamiają się odpowiednie metody, delay jest wyliczany na podstawie różnicy dat (data testu - bieżąca data), następnie tworzony jest obiekt typu Timer. Chodzi o to, że strasznie toporny mi się wydaje ten kod, ponieważ do każdego przypadku trzeba tworzyć osobną klasę anonimową, a chodzi przecież o jedno wywołanie metody, tu nasuwa się pytanie - czy da się to zrobić w lepszy sposób, tzn. użyć odpowiedniej biblioteki (znalazłem Quartz, ale nigdy nie używałem), albo to po prostu inaczej napisać bardziej czytelnie.
Pozdrawiam serdecznie!