Gå til innhold

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


Anbefalte innlegg

Skrevet (endret)

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
Videoannonse
Annonse
Skrevet

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!")

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...