Cześć,
w moim programie jest ramka JFrame nazwijmy ją SettingFrame, ponieważ służy do zmian ustawień. W ramce tej utworzony jest guzik. Guzik ten wywołuje ważną funkcję - start(), która otwiera okno przeglądarki.
funkcja jest bardzo prosta i znajduje się w klasie Test.
public class Test {
private WebDriver driver;
public void start() {
driver = new FirefoxDriver();
}
public void select() {
driver.get("jakis url");
}
}
W klasie SettingFrame tworzony jest obiekt typu Test w następujący sposób: (żeby zaoszczędzić wam czasu napiszę część klasy pseudokodem)
public class SettingFrame extends JFrame {
private Test t = new Test();
public SettingFrame() {
//ustawienia ramki
actionPerformed -> t.start();
}
public Test getTest() {
return t;
}
}
Teraz przejdźmy do 3 ostatniej ramki. To ramka głownego okna programu - MainFrame. W tej ramce chcemy wywołać inną metodę z klasy Test, a mianowicie select(), jednakże ta metoda zwróci NullPointerException, jeśli metoda start(), nie zostanie wcześniej wywołana.
public class MainFrame extends JFrame {
private Test t;
SettingFrame ssFrame = new SettingFrame();
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainFrame frame = new MainFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
public MainFrame() {
//ustawienia ramki
actionPerformed {
t = ssFrame.getTest();
t.select(admin);
}
}
}
Jak widzicie ustawiłem mój obiekt "t" w MainFrame na obiekt z SettingFrame. Jednakże dostaję wyjątek NullPointerException jakby funkcja start() w ogóle się nie wywołała.
Pozdrawiam was serdcznie i dziękuje z góry za pomoc.
Edycja:
Jeszcze chciałbym dodać, że użycie słowa kluczowego static przy private Test t = new Test(); w klasie SettingFrame, rozwiązuje ten problem, jednakże wolałbym to zrobić bez zmiennej statycznej.
<code=java</code>