2012-04-14 3 views
0

Ich habe verschiedene Klassen für verschiedene Arten von Programm-Genres (Comedy, Drama usw.).Problem mit dem Befüllen von JTable und JTextFields

Ich habe eine Textdatei mit '-' getrennten Werten gefüllt, die von einer Klasse namens Processing gelesen und in eine LinkedList eingefügt werden.

Ich habe eine andere Klasse GUI_g, die die GUI erstellt. Es hat 2 JTables. Eins für die Liste und 1 für den Kanal. Die JTable listTable wird aus der verknüpften Liste gefüllt, und wenn ein Benutzer auf eine Zeile klickt, ändert sich der Text der Textfelder entsprechend.

Ich versuchte mit 5 Feldern (Titel, Genre und Dauer, Schauspieler, Direktor) und es funktionierte, mit den 3 textfields, die unterschiedlichen Text zeigen, entsprechend welcher Reihe geklickt wird. Wenn ich jedoch alle erforderlichen Werte hinzugefügt habe, wird ein Fehler angezeigt und keine Felder ausgefüllt.

Ich habe zwei Probleme:

Wenn es ein Musikvideo ist die Zellen nicht gefüllt sind jedoch (wie es sein sollte) es einen Fehler zurückgibt, wenn das Kopieren von Daten auf die JTextFields Die Snyopsis Spalte bleibt leer und ist nicht gefüllt . Unten sind die Klassen (die hauptsächlich verwendet). Wenn du andere brauchst, sag es mir und ich lade es hoch.

GUI_g: http://pastebin.com/KsZBwgtR ProgramTableModel: http://pastebin.com/6Rc2bVxa Verarbeitung: http://pastebin.com/8f8iteVK Programm: http://pastebin.com/NU3XGvM8

Dies ist der Fehler, den ich bekommen:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at GUI_g$1.mouseClicked(GUI_g.java:205) 
    at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270) 
    at java.awt.Component.processMouseEvent(Component.java:6507) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
    at java.awt.Component.processEvent(Component.java:6269) 
    at java.awt.Container.processEvent(Container.java:2229) 
    at java.awt.Component.dispatchEventImpl(Component.java:4860) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Component.dispatchEvent(Component.java:4686) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
    at java.awt.Container.dispatchEventImpl(Container.java:2273) 
    at java.awt.Window.dispatchEventImpl(Window.java:2713) 
    at java.awt.Component.dispatchEvent(Component.java:4686) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) 
    at java.awt.EventQueue.access$000(EventQueue.java:101) 
    at java.awt.EventQueue$3.run(EventQueue.java:666) 
    at java.awt.EventQueue$3.run(EventQueue.java:664) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
    at java.awt.EventQueue$4.run(EventQueue.java:680) 
    at java.awt.EventQueue$4.run(EventQueue.java:678) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 

Bildbeispiel:

enter image description here

Antwort

1

Das Problem ist Zeile 205 in Ihrer GUI_g-Klasse (wie der Compiler angegeben).

Sie haben den Eingabewert nicht überprüft oder bereinigt, bevor Sie versucht haben, die Methode toString() zu verwenden.

können Sie eine Methode natürlich nicht für einen Nullwert verwenden.

Sie müssen alle Eingaben (nicht nur diese) überprüfen. Da Sie viele Felder haben, sollten Sie eine Hilfsmethode/Klasse erstellen, die das für Sie erledigt und eine saubere Eingabe zurückgibt.

Wenn Sie nur diese schnell um diese zu bekommen, tun:

String actor = " "; 
T input = listTable.getValueAt(row, column+3); 
if (input != null) actor = input.toString(); 
return actor; 

Ersetzen ‚T‘ mit dem, was Objekt, das Sie überprüfen wollten.

+0

Können Sie mir bitte erklären, mit was genau ich 'T' ersetzen soll? Ich habe nicht ganz verstanden – Brian

+0

@Brian: Die toString() - Methode ist eine java.lang.Object-Methode, so dass es zu jedem Objekt gehören kann. Ich habe nicht den Code durchsucht, um die Methode zu finden, auf die sich listTable.getValueAt (...) bezieht, sondern das Objekt, das Sie von dieser Methode zurückgeben - Sie müssen T nur auf diesen Typ setzen (T steht für Typ, übrigens). – Ozzy

+0

ahh ok danke. auch .. warum ist das Synopsisfeld nicht für jedes Objekt da? – Brian