Wywoływanie metody niestatycznej z niestatycznej, błąd NetBeans

0

Zaczynam naukę Javy i chciałbym na początek ogarnąć klasy, metody itp.
Jest to moje pierwsze podejście do jakiegokolwiek języka obiektowego i jak pewnie sami wiecie niezrozumienie pewnych kwestii może napsuć krwii człowiekowi.

Dowiedziałem się jak wywoływać metodę niestatyczną ze statycznej (przez utworzanie obiektu), jednak wywołać metody niestatycznej z niestatycznej nie mogę (a chyba nie powinno być żadnego problemu).

Problem prezentuje poniższy kod:

public class Test{
    
    public void inna(String a){
        System.out.println(a.length());
    }
    
    public void metoda(){
    String a;
    Scanner odczyt = new Scanner(System.in);
    a = odczyt.nextLine();
    Test.inna(a);
    }
    
    
    public static void main (String[] args){
    System.out.println("Hello");
    Test obj = new Test();
    obj.metoda();
    }
}

NetBeans wyświetla mi błąd do linijki z "Test.inna(a);":
"non-static method inna(String) cannot be referenced from static content"
choć wydaje mi się, że metoda() nie jest statyczna...

Poprosiłbym o rozwiązanie tej kwestii, bo docelowo chciałbym rozwiązać problem ustawienia tytułu okienka jFrame poprzez wpisanie go w konsoli po uruchomieniu programu, gdzie okienko to osobna klasa (chciałbym nauczyć się komunikować między klasami). Napisałem już do tego celu metodę publiczną, ale nie może ona być statyczna toteż nie mogę wywołać jej z metody main. Utworzyłem nową metodę niestatyczną (przynajmniej tak mi się wydaje), ale z niej także nie mogę wywołać metody niestatycznej.

Z góry dziękuję i pozdrawiam.
Paweł

1

Metoda metoda nie jest statyczna, ale to wywołanie

Test.inna(a);

jest "statyczne". Wywołujesz metodę inna na rzecz klasy, a nie na rzecz obiektu. Zmień na

this.inna(a);
0

Dziękuję.
A jakbym chciał w metoda() wywołać metodę niestatyczną z innej klasy, jak miałoby to wyglądać?
Bo znów sytuacja wygląda tak samo a operator this nie ma tu zastosowania...

1

Np. tak

class Pierwsza{
    public static void main(String[] args){
        Druga other = new Druga();
        other.doSomething();
    }
}
0

To także pomogło, jeszcze tylko ostatnie pytanie. :)
Czy jest możliwość użycia "other.doSomething();" w innej metodzie, niż tworzyliśmy obiekt other?
Jeśli tak, to w jaki sposób?

1

other nie może być wtedy zmienna lokalną, musi być polem w klasie

class Pierwsza{
    Druga other;
    public static void main(String[] args){
        other = new Druga();
        doSomething();
    }
    static void doSomething(){
        other.doSomething();
    }
}
0

Dziękuję.
W przykładzie na górze znowu wyrzucało błąd (static/non-static).
Uporałem się tak jak poprzednio, przez niestatyczną metodę.
Myślę, że wyszedłem na prostą z nauką Javy, zawsze na początku trzeba przeskoczyć pewne kłody. :)

package test;
import java.util.*;

public class Test{
    NewWindow window;
    
    public void metoda(){
    window = new NewWindow();
    window.setVisible(true);
    String a;
    Scanner odczyt = new Scanner(System.in);
    a = odczyt.nextLine();
    window.NazwijOkno(a);
    window.InitjProgressBar1();
    this.progress();
    }
    
    public void progress(){
        
       for(int i=0; i<=100; i++){
        window.SetjProgressBar1(i);
        try { 
        Thread.sleep(100); 
        } 
        catch (InterruptedException e) { 
        System.out.println("obudzony przedwcześnie"); 
        }
       }
    }
    
    public static void main (String[] args){
    Test obj = new Test();
    obj.metoda();
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1