Zagadkowy Exception

0

Uruchomiłem program o z grubsza takim kodzie

public class Szarkowski extends JFrame implements ActionListener
{
   //definicje pól
    //------------------------
    public static void main(String[] args)
    {
        new Szarkowski();
    }
    //------------------------
    public Szarkowski()
    {
       //tylko rozmieszczenie komponentów i podpięcie słuchaczy
    }
    ...............
}

nic nie robiąc w programie zamknąłem frame'a i zobaczyłem takie coś:

Exception while removing reference: java.lang.InterruptedException
java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at sun.java2d.Disposer.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Dodam, że program był wcześniej wielokrotnie uruchamiany bez żadnych tajemniczych komunikatów.

0

Wyjatek wyglada na niezwiazany ze Swingiem, ale...
W sumie podales za malo informacji. Ciekawi mnie jak pokazujesz Frama. Wspomnij na to: http://java.sun.com/javase/6/docs/api/javax/swing/package-summary.html#threading
Gdziestam czytalem ze zazwyczaj mozna zrobic new JFrame().setVisible(true) w watku 'main', ale sa pewne komponenty ktore sprawiaja ze mozna dostac jakies rozne zonki, dlatego powinno sie to robic w EDT, np za pomoca invokeLater wlasnie. Z tego co pamietam (dawno, oj dawno) Netbeans generowal np kod z invokeLater. Ile ja sie wtedy naglowilem po co to jest.

Nie wiem czy to ma cokolwiek wspolnego z tym czego doswiadczyles, mozliwe ze po prostu trafiles na jakiegos buga.

0
  1. Okno jest otwierane przez wywołanie setVisible(true) w konstruktorze.
  2. Robiłem eksperymenty, komunikat o błędzie pojawia się mniej więcej w połowie uruchomień programu.
  3. Sytuacja dzisiejsza (z komunikatami o błędach) różni się od wcześniejszych (bez komunikatów), od paru godzin inny program Javy wykonuje pewne obliczenia.
0

Nie wiem dlaczego tak sie dzieje, ale wiem ze setVisible w konstruktorze w warku main jest bledne. Mimo ze tutoriale tak czesto robia to nadal jest to niepoprawne. Ale to nie ma zwiazku pewnie.

0

Sprawdziłem kilkanaście innych programów napisanych wg tego samego schematu:

public class A extends JFrame
{
   public static void main(String[] args)
   {
       new A();  
   }
   public A()
   {
      .....
      setVisible(true);
   } 
}

Exception pojawia się tylko dla jednego programu (Szarkowski).

0

Jak pewnie zauwazyles, to jest jakis problem z watkami, a takie problemy trudno wyczaic, wiec to moze byc cos bardzo specyficznego dla tej aplikacji. Np nazwa klasy ktra jest nazwiskiem ;-)
Nie twierdze tez ze ten wyajtek ma cokolwiek wspolnego tym jak pokazujesz forme; twierdze, ze zle ja pokazujesz i podalem link ostatniej instancji - dokumentacji suna. No i jako programista powinienes widziec ze to ze dziala dla kilkunastu innych nie jest dowodem ze jest dobrze napisane.
Nie ma sensu ciagnac tej rozmowy w tym kierunku, sory ze w ogole zaczalem.

0

Przerobiłem

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new Szarkowski().createAndShowGUI();
            }
        });
    }

nie pomogło.

0

Powiadasz, objawia się takie coś przy zamykaniu...
Dodajesz jakieś listenery czy korzystasz z setDefaultCloseOperation ?

0

Korzystam z setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE).

0

Wyglada na bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6321642
Problem dotyczy watku Java2D Disposer w 6-tce. Wyglada, jakby watek niszczacy okna byl przerywany przez proces JVM odpowiedzialny za zamykanie aplikacji.

Probowales uzyc JFrame.DISPOSE_ON_CLOSE? I tak z ciekawosci: probowales skompilowac ten program z flagami dla 5-tki i sprawdzic, czy bedzie tak samo?

0

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) nie pomogło. Trochę pomogło javac -target 1.5 -source 1.5 Szarkowski.java, zmalała częstotliwość pojawiania się wyjątków (20% uruchomień). Zupełnie pomogło zakończenie tego drugiego programu Javy.

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