problem z zamknieciem JFrame

0

dumam juz nad tym i dumam i po prostu nie mam pojecia co jest nie tak. problem mam taki ze nie moge zamknac JFrama..

w kodzie wyglada to mniej wiecej tak:

public class Klasa1 {

public Klasa1() {}
 JFrame ramka = new JFrame();       
     JPanel panel = new JPanel();
   
public void StworzRamke(int par)
{
   ramka.setSize(300, 50);
   ramka.add(panel);
 
}

}
// dalej w programie inna klasa z inna funkcja..

class Klasa2 {
Klasa1 obiekt = new Klasa1();

public void nowaFunkcja() {

try {
//ustaw ramke na visible
obiekt.ramka.setVisible(true);
//rob cos
/petla for

 for (int ii=0...)
{

// tutaj wywoluj funkcje, bo trzeba przekazac parametr par
obiekt.StworzRamke(ii);
}


// I TERAZ TUTAJ POTRZEBUJE ZAMKNAC RAMKE..
obiekt.ramka.setVisible(false); // NIE DZIALA..
}

catch(Exception) {}


} 

}


czy ktos moze widzi gdize mam blad? albo wie jak moge zamknac ta ramke??
pzdr!

0

Rób wcięcia...

Z kodu Klasa2 wynika, że w Klasa1 jest pole ramka. Natomiast w kontruktorze tworzysz zmienną lokalną o tej samej nazwie.
Nie wyskakuje Ci przypadkiem NullPointerException? Czy został tu wklejony napisany na szybkiego kod?

W klauzuli try - catch, metody: nowaFunkcja(), nie obsługujesz wyjątku:

catch(Exception e) {}

Zrób coś takiego:

catch(Exception e) {
	e.printStackTrace();
}

i zobacz czy nic nie pojawi się w konsoli.

0

hmmm. u mnie dziala to z obiekt.ramka.setVisible(false). Kod przetestowalem bez try - catch bloku. Alternatywnie mozna uzyc obiekt.ramka.dispose(); Zostanie ramka zlikwidowana i pamiec wyczyszczona. Albo to : System.exit(0); Powinno na pewno zadzialac.

0

ahh nie zauważyłem, że konstrukor jest pusty {}

mój błąd.

0

Faktycznie całość działa, Okno pojawia się i znika.

0

obiekt.ramka.dispose();

0

funkcja dispose() jest odpowiedzialna za zamkniecie frame. pamietaj zeby wpisac opcje dispose_on_close bo wtedy zamkniecie mainFrame spowoduje zamkniecie wysztkich watkow.

0

to byl tylko przykladowy kod napisany szybko z glowy. w rzeczywistosci wiecej mam tych try-catch i w sumie problemem bylo to, ze probowalam wywolac zamkniecie ramki nie tam gdzie trzeba..
juz dziala, z dispose()
dzieki za podpowiedzi!

pzdr,
misty

0

Problem jest chyba nieco bardziej złożony, chociaż jakby rozwiązany.

Właśnie znalazłem stronkę, gdzie jest to dokładnie obcykane:
http://java.sun.com/javase/6/docs/api/java/awt/doc-files/AWTThreadIssues.html

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