korzystanie ze zmiennej innej klasy

0

hej!
potrzebuje w jednej z klas skorzystac ze zmiennej innej klasy. tj. w pierwszej klasie mam Stringa ktory za pomoca getText() sczytuje co zostalo wpisane w polu tekstowym; w innej klasie potrzebuje wykorzystac tego stringa by stworzyc zapytanie. kody wygladaja mniej wiecej tak:

 
class PierwszaKlasa implements ActionListener{
	String tekst_wpisany;
	public void actionPerformed(ActionEvent zdarzenie) {
			pole_tekst = new JTextField();
			add(pole_tekst);
			pole_tekst.setBounds(10, 100, 100, 20);
			tekst_wpisany = new String(pole_tekst.getText());
	
}

druga klasa:

class DrugaKlasa {
//tu mam zrealizowane polaczenie i zapytanie do bazy ktore musi skorzystac z tekst_wpisany

	 String zapytanie = "select imie, nazwisko from t_osoba "+
	 		"where nazwisko='"+KlasaPierwsza.tekst_wpisany+"'";
		

}

jednak dostaje blad :
Cannot make a static reference to the non-static fields PierwszaKlasa.tekst_wpisany
o co chodzi? i jak mam w takim razie skorzystac z tekst_wpisany w tej drugiej klasie?

0

Chyba coś pokręciłeś n nazwami klas - raz jest KlasaPierwsza, a raz PierwszaKlasa. Zakładam, że ma być PierwszaKlasa.
Kompilator Ci wszystko co trzeba powiedział. Pole tekst_wpisany w klasie PierwszaKlasa nie jest static, więc nie możesz się do niego odwołać PierwszaKlasa.tekst_wpisany. Albo wspomniane pole musi być static, albo musisz wpierw utworzyc obiekt klasy PierwszaKlasa.

0

hej,
sorki pisalam troche z pamieci, ma byc PierwszaKlasa.
probowalam juz tworzyc obiekt tej klasy, w ten sposob:

class DrugaKlasa {
PierwszaKlasa nowy_obiekt;

         String zapytanie = "select imie, nazwisko from t_osoba "+
                         "where nazwisko='"+nowy_obiekt.tekst_wpisany+"'";
                

}

i wtedy faktycznie nie byly zwracane bledy, ale zapytanie nic nie zwrocilo mi. a jak probowalam wypisac sobie :

System.out.println(""+nowy_obiekt.tekst_wpisany)

to mi zwraca ze nie mozna pobrac danych z bazy:/
przedstawie moze troche wiecej kodu drugiej klasy by bylo lepiej wiedoczne:

class DrugaKlasa {

		PierwszaKlasa nowy_obiekt;
		
		
		public PierwszaKlasa() {
		}

		public ResultSet zwroc_dane()
		{
	ResultSet wynik = null;
	try {
			// ladowanie sterownika
				Class.forName(BazaConnector.sterownik);
		Connection polaczenie = DriverManager.getConnection(
						BazaConnector.URL, BazaConnector.user,
						BazaConnector.password);
	Statement s = polaczenie.createStatement();
				System.out.println("Polaczono!");
				try {
		System.out.println(""+nowy_obiekt.tekst_wpisany);
		
					
	 String zapytanie = "select imie, nazwisko from t_osoba"+ 
	"where nazwisko='"+nowy_obiekt.tekst_wpisany+"'";
			
	wynik = s.executeQuery(zapytanie);

	System.out.println("Pobieranie danych z bazy...");
	
					}

				} catch (Exception wyjatek) {
					System.out.println("Nie mozna pobrac danych z bazy..");
				}

			} catch (Exception wyjatek) {
				System.out.println("Nie mozna nawiazac polaczenia z baza!");
			}
			return wynik;
		}

	}

no wiec pojawia sie ze nie mozna nawiazac polaczenia z baza.
polaczenie moze nawiazac bo jesli wpisze zapytanie na sztywno to sie wykona i zwroci wyniki.
a PierwszaKlasa nie moze byc static bo zawiera szereg metod ktore nie sa static(przynajmniej tak mowi kompilator)

0
misty napisał(a)

hej,
sorki pisalam troche z pamieci, ma byc PierwszaKlasa.
probowalam juz tworzyc obiekt tej klasy, w ten sposob:

class DrugaKlasa {
PierwszaKlasa nowy_obiekt;

         String zapytanie = "select imie, nazwisko from t_osoba "+
                         "where nazwisko='"+nowy_obiekt.tekst_wpisany+"'";
                

}

Nie widzę, gdzie Ty tu tworzysz jakiś obiekt. Obiekty w Java tworzy się przez new(). To nie C++.
Chyba miało być:

PierwszaKlasa nowy_obiekt = new PierwszaKlasa();

I jeszcze taka dobra rada na przyszłość: wyłapywanie Exception to nie jest dobry pomysł. Ogólnie taki styl programowania jest brzydki i prowadzi do tego, że nie wiesz, co się dzieje w kodzie. U Ciebie pewnie poleciało NullPointerException, ale że masz złą obsługę błędów, to zastąpiło Ci komunikatem wypisanym prez System.out.println. Wyłapuj tylko te wyjątki, które możesz obsłużyć. Jeśli musisz wyłapywać pozostałe, a nie możesz ich po ludzku obsłużyć, LOGUJ JE (np. e.printStackTrace()).

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