Gå til innhold

Swing: Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: Exception in Collections.sort


Anbefalte innlegg

Jeg jobber med noen GUI-klasser som inneholder ganske mye kode, og tilsynelatende tilfeldig oppstår dette problemet, kanskje 1 av 100 ganger jeg starter programmet. Noen som har opplevd dette før? Spesielt rart synes jeg at Collections.sort er inni bildet.

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException
at javax.swing.LayoutComparator.compare(LayoutComparator.java:72)
at java.util.Arrays.mergeSort(Arrays.java:1284)
at java.util.Arrays.mergeSort(Arrays.java:1296)
at java.util.Arrays.mergeSort(Arrays.java:1295)
at java.util.Arrays.sort(Arrays.java:1223)
at java.util.Collections.sort(Collections.java:159)
at javax.swing.SortingFocusTraversalPolicy.enumerateAndSortCycle(SortingFocusTraversalPolicy.
ava:119)
at javax.swing.SortingFocusTraversalPolicy.getFirstComponent(SortingFocusTraversalPolicy.java
434)
at javax.swing.LayoutFocusTraversalPolicy.getFirstComponent(LayoutFocusTraversalPolicy.java:1
8)
at javax.swing.SortingFocusTraversalPolicy.getDefaultComponent(SortingFocusTraversalPolicy.ja
a:511)
at java.awt.FocusTraversalPolicy.getInitialComponent(FocusTraversalPolicy.java:149)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:318)
at java.awt.Component.dispatchEventImpl(Component.java:3857)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Window.dispatchEventImpl(Window.java:1791)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.SequencedEvent.dispatch(SequencedEvent.java:93)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Endret av pgdx
Lenke til kommentar
Videoannonse
Annonse

Som du sikkert har sett, saa blir det hele startet av en FocusManager (DefaultKeyboardFocusManager). Naa har jeg dessverre ikke saa mye peiling paa focus-policies, men det er i dette tilfelle kanskje ikke noedvendig.

 

Methoden som kaster ClassCastException er javax.swing.LayoutComparator.compare(Object,Object). En kjapp tur innom klassen:

	public int compare(Object o1, Object o2) {
Component a = (Component)o1;
Component b = (Component)o2;

if (a == b) {
	return 0;
}

// Row/Column algorithm only applies to siblings. If 'a' and 'b'
// aren't siblings, then we need to find their most inferior
// ancestors which share a parent. Compute the ancestory lists for
// each Component and then search from the Window down until the
// hierarchy branches.
if (a.getParent() != b.getParent()) {
	LinkedList aAncestory, bAncestory;

	for(aAncestory = new LinkedList(); a != null; a = a.getParent()) {
	aAncestory.add(a);
	if (a instanceof Window) {
		break;
	}
	}
	if (a == null) {
	// 'a' is not part of a Window hierarchy. Can't cope.
	throw new ClassCastException(); // <------------ HER begynner StackTrace'n
	}

Som du kan se, saa kastes ClassCastException hvis ikke methode parameter 1 (java.awt.Component) har en Window som ancestor (foroevrig en horribel exception aa kaste der, uten message eller noe :thumbdown: ). Sannsynligvis er en eller annen Component ikke forankret i en JFrame eller JDialog (eller en Subklasse av Window), paa et gitt tidspunkt. Collections blir forresten brukt her som en utility-class for javax.swing.SortingFocusTraversalPolicy

 

Har du en eller annen dialog uten parent? (f.eks. JOptionPane.showConfirmDialog(null,"Confirm this!")

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...