wieso Nullpoint und was mit Events ?

rwolf

Bekanntes Mitglied
also, ich hab wohl tomaten vor den augen, sehe nicht, was da falsch ist :
(es geht darum, JTextField mit Strings zu befüllen aus Datenrekord (Tokenstream) )
Java:
public class eal_manage_methoden extends JDialog
{
..
    public static JTextField txf_methmatch;
    private static JTextField txf_methnr1;
    private static JTextField txf_methnr2;
..
    private static void fill_mask_fields ()
    {
        //- Eingabefelder mit Datenzeileninhalt fuellen
        mask_data_stream = mask_data_stream.substring(1,mask_data_stream.length()-2);
        mask_data_stream.trim();
        mask_data_stream = mask_data_stream.substring(0,mask_data_stream.length()-1);
        System.out.println("eal_manage_methoden fill_mask_fields stream : " + mask_data_stream);
        
        StringTokenizer st = new StringTokenizer(mask_data_stream,",");
        String token = "";
        int i = 0;
                while (st.hasMoreTokens())
                {
                    token = st.nextToken();
                    System.out.println("fill_mask_fields token feldnr : "+i+" Wert : " + token);

                    switch(i)
                    {

                        case 0:
                        {
                            txf_methmatch.setText(token);
                            break;
                        }
                        case 1:
                        {
                            txf_methnr1.setText(token);
                            break;
                        }
                        case 2:
                        {
...
...
                        }

                    }
                    i++;
             }
        
    }

mag auch in ner schleife gehen, aber momentan kommten immer folgende meldungen :
Java:
eal_manage_methoden fill_mask_fields stream : 100, 1, 0, Breite, DIN 53851, J, 0, 0, 0, 0, 2, L, 2023-03-20, cm, R.Kowalewsky
fill_mask_fields token feldnr : 0 Wert : 100

**** Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException ***

QPruef_DataHandler  Maskfill Methodenmanagement SQL : SELECT * FROM eal_methoden WHERE methmatch = ? 
Treiber : oracle.jdbc.driver.OracleDriver

pif get_direct_con URL :jdbc:oracle:thin:@TECSTORE:1521:EALtest1

Test get_direct_con URL :jdbc:oracle:thin:@TECSTORE:1521:EALtest1 KW :SYSTEM PW :dbrootx
QPruef_DataHandler MtMng filt_var : 100
** get_mask_data_mtmng with 14 Anzahl Saetze : 1
get_mask_data_mtmng Anzahl records in out_vec : 1
get_mask_data_mtmng single_vec(0) : [100, 1, 0, Breite, DIN 53851, J, 0, 0, 0, 0, 2, L, 2023-03-20, cm, R.Kowal, ]
eal_manage_methoden fill_mask_fields stream : 100, 1, 0, Breite, DIN 53851, J, 0, 0, 0, 0, 2, L, 2023-03-20, cm, R.Kowal
fill_mask_fields token feldnr : 0 Wert : 100
        at 
Mehler_Pruedatenverwaltung_EAL.eal_manage_methoden.fill_mask_fields(eal_manage_methoden.java:446)
        at Mehler_Pruedatenverwaltung_EAL.eal_manage_methoden.access$200(eal_manage_methoden.java:33)
        at Mehler_Pruedatenverwaltung_EAL.eal_manage_methoden$1.valueChanged(eal_manage_methoden.java:145)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:147)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:194)
        at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:388)
        at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:398)
        at javax.swing.DefaultListSelectionModel.setSelectionInterval(DefaultListSelectionModel.java:442)
        at javax.swing.JTable.changeSelectionModel(JTable.java:2352)
        at javax.swing.JTable.changeSelection(JTable.java:2421)
        at javax.swing.plaf.basic.BasicTableUI$Handler.adjustSelection(BasicTableUI.java:1085)
        at javax.swing.plaf.basic.BasicTableUI$Handler.mousePressed(BasicTableUI.java:1008)
        at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:263)
        at java.awt.Component.processMouseEvent(Component.java:6264)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4235)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at Mehler_Pruedatenverwaltung_EAL.eal_manage_methoden.fill_mask_fields(eal_manage_methoden.java:446)
        at Mehler_Pruedatenverwaltung_EAL.eal_manage_methoden.access$200(eal_manage_methoden.java:33)
        at Mehler_Pruedatenverwaltung_EAL.eal_manage_methoden$1.valueChanged(eal_manage_methoden.java:145)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:137)
        at javax.swing.DefaultListSelectionModel.setValueIsAdjusting(DefaultListSelectionModel.java:668)
        at javax.swing.plaf.basic.BasicTableUI$Handler.setValueIsAdjusting(BasicTableUI.java:923)
        at javax.swing.plaf.basic.BasicTableUI$Handler.mouseReleased(BasicTableUI.java:1136)
        at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:273)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
ERSTELLEN ERFOLGREICH (Gesamtzeit: 0 Minuten 19 Sekunden)

das ganze läuft mit JAVA SE SDK1.6 in NetBeans IDE 6.9.1 unter MS-Windows 2007

was ist da "Null" ? token ist doch was drin und JTexField txf_methmatch und die anderen wohldefiniert...
 
txf_methmatch ist null? ob ja oder nein ist nicht im Code zu erkennen, dass dieses Attribut public ist ist leicht verdächtig

die Fehlermeldung ist bisschen ungewöhnlich, wie kommt da das SQL rein?
welche der geposteten Zeilen ist 446 bei dir?

baue zur Abklärung notfalls eigenes System.out.println() für vakante Variablen ein
oder ein eigenes temporäres try/catch in diesem Bereich


----

> mask_data_stream.trim();
für sich hat keine weiteren Auswirkungen außer der Arbeit + mögliche Exceptions, wenn etwa der String null ist, schreibe
mask_data_stream = mask_data_stream.trim();
 
Zuletzt bearbeitet von einem Moderator:
Ich seh in dem Code nicht viel außer Unterstriche 🙂

Halte dich bitte an die Konventionen: Variablen klein, Klassen groß, wenn möglich keine Variablen mit zig Unterstrichen u.s.w.
Wirf das ganze static-Zeug raus und arbeite mit Objekten.

Nimm nen Debugger in der IDE deiner Wahl und schau nach, aber sieht schwer danach aus als ob das Textfeld null ist.
 
[JAVA=446]
txf_methmatch.setText(token);
[/code]
hab noch folgendes eingefügt :
[JAVA=433]
if(!(txf_methmatch instanceof JTextField))
{
System.out.println("eal_manage_methoden fill_mask_fields Textfelder ungueltig !?");
}
[/code]
danach ist txf_methmatch gültig, der Fehler tritt weiterhin auf (Zeilen entsprechend verschoben)

merkwürdig , daß die Fehlermeldung schon einige Meldungszeilen früher kommt, also zwischen den
debug-Zeilen der vorgegehenden Datenbeschaffung..

diese Code wurde aber aus einem anderen Modul kopiert, wo das Ganze super funzt..grübel
 
Was soll denn der instanceof ? Ein != null wäre wohl eher gewollt..

Was steht in der Zeile:

at Mehler_Pruedatenverwaltung_EAL.eal_manage_methoden.fill_mask_fields(eal_manage_methoden.java:446)

eal_manage_methoden, Zeile 446 ??

Ihr habt noch mehr solchen Code? Habt ihr auch Entwickler die sich halbwegs mit den Java Konventionen auskennen?

Und das schönste wieder mal: "Kopieren statt Programmieren"..

Edit: Du kommst aus Hofbiber? Cool, ich bin jedes Jahr in Langenbiber..euer Zwiebelkuchen (oder was das ist) am jährlichen Fest schmeckt echt super 🙂
 
Hast du denn irgendwo (sinnvoller Weise am Anfang)
Code:
txf_methmatch=new JTextField();
stehen?
Ansonsten lass dir
Code:
txf_methmatch==null
ausgeben
 
die Vermischung der Ausgaben kommt durch die zwei Streams System.out und System.err für die Exception,
vielleicht ist die Ausgabe 'ungueltig' auch nur irgendwo anders einsortiert?

wenn etwas NICHT erscheint ist das generell ein schlechter Test,
verwende um sicherzugehen
Java:
case 0:
{
   System.out.println("Fall 0 Anfang");
   if (txf_methmatch == null) {
       System.out.println("null ist doof!");
   } else {
      try {
          txf_methmatch.setText(token);
          System.out.println("geschafft");
      } catch(NullPointerException e) {
          System.out.println("null ist doof??");
      }
   }
   System.out.println("Fall 0 Ende");
   break;
}

freilich kann es danach noch zu weiteren Exceptions bei anderen TextFeldern oder sonstwo kommen, mit wieder vollgespammter Ausgabe,
schau dir wirklich exakt den Log-Bereich zwischen 'Anfang' und 'Ende' an
 
Man kopiert keinen Code aus einem Modul, man bindet das Modul in sein Project mit ein. Dafür wurde OOP und deren Konventionen entwickelt.

Leicht erweiterbar
Leicht wartbar
Leicht zu verknüpfen
Leicht zu abstrahieren

Das Ist OOP. Wenn das andere Modul allgemeingültig und nach OOP entwickelt wurde, kannst du es für dein Problem verwenden. Also mach doch einfach nen Import.
 
Ach ja, hast du eigentlich bemerkt das dein Code oben einige Bugs hat?

Die Zeile

mask_data_stream.trim();

bewirkt gar nix, außer das der String getrimt und dann sofort weggeworfen wird.

Code:
String val = "ab   ";

val.trim();

System.out.println(val);  // da kommt "ab   " raus und NICHT "ab"

// Strings sind immutable!!!  korrekt wäre 

val = val.trim();
 
Man kopiert keinen Code aus einem Modul, man bindet das Modul in sein Project mit ein. Dafür wurde OOP und deren Konventionen entwickelt.

Leicht erweiterbar
Leicht wartbar
Leicht zu verknüpfen
Leicht zu abstrahieren

Das Ist OOP. Wenn das andere Modul allgemeingültig und nach OOP entwickelt wurde, kannst du es für dein Problem verwenden. Also mach doch einfach nen Import.

Bei oben stehendem Code bin ich mir zu hundert Prozent sicher das er nicht erweiterbar, nicht wartbar, nicht verknüfpfbar und auch nicht abstrahierbar ist! Der Code ist rand voll mit öffentlichen Feldern, statischen Methoden und enthält nicht ein Fünkchen objektorientierten Code, daher wohl auch Kopieren statt Einbinden 😀
 
Bei oben stehendem Code bin ich mir zu hundert Prozent sicher das er nicht erweiterbar, nicht wartbar, nicht verknüfpfbar und auch nicht abstrahierbar ist! Der Code ist rand voll mit öffentlichen Feldern, statischen Methoden und enthält nicht ein Fünkchen objektorientierten Code, daher wohl auch Kopieren statt Einbinden

Dann wird es zeit, das Sie sich gedanken darüber machen ^^

Lernen durch schmerzen... und nochmal das ganze!
 
Andererseits hat der Code mehrere Vorteile:

1. Arbeitsplätze schaffen
Die Anzahl an geforderten Entwicklern für den Code erhöht sich exponentiell zu der Anzahl an Lines of Code

2. Arbeitsplätze sichern
Einmal den Code verstanden, schon hat man seinen Arbeitsplatz auf Dauer gesichert. Kein anderer Entwickler wird den Code
schnell genug verstehen um einen zu ersetzen

3. Testen braucht man nicht
Der obige Code ist komplett untestbar, keine Chance zu Mocken, daher spart man sich schonmal den enormen Aufwand für's testen.
Damit hat man wohl so 30-40% mehr Budget für Weiterentwicklung - was man natürlich in den Punkt 2 investieren kann
 
Andererseits hat der Code mehrere Vorteile:

1. Arbeitsplätze schaffen
Die Anzahl an geforderten Entwicklern für den Code erhöht sich exponentiell zu der Anzahl an Lines of Code

2. Arbeitsplätze sichern
Einmal den Code verstanden, schon hat man seinen Arbeitsplatz auf Dauer gesichert. Kein anderer Entwickler wird den Code
schnell genug verstehen um einen zu ersetzen

3. Testen braucht man nicht
Der obige Code ist komplett untestbar, keine Chance zu Mocken, daher spart man sich schonmal den enormen Aufwand für's testen.
Damit hat man wohl so 30-40% mehr Budget für Weiterentwicklung - was man natürlich in den Punkt 2 investieren kann

Wie geil ist das denn ^^

Deine herliche Ironie versüßt mir den Tag 😀
 
die Abfolge des Komponentenaufbaus im gesamten Modul stimmt anscheinend nicht , es gibt ne Init-Methode für die Textfields, aber wohl an der falschen Stelle, somit ist txf_methmatch null !

also : fremden Code zu verstehen - auch wenn er von "Fachleuten" kommt - ist oft extrem schwer..wie soll ich ihn dann "einbinden" ? und wieso verschwinden solche fachleute auf nimmerwiedersehn, wenn sie doch sooo guuut sind ?
aber funzt ja in nem anderen Modul..
 
nun, fehler war in Init-Methode , dort waren die Textfelder lokal deklariert, und oben im Klassenkopf nochmal public static ..wurde wohl vergessen, in der Init -Methode entsprechend zu ändern..nun funzt das..aber wirklich der nicht eleganteste Code..
muß dazu sagen , es geht um "Reengineering" einer alten Geschichte, muß doch erstmal sehen,
was das ding überhaupt zaubert, bevor neu konstruiert wird..Doku ? kann man das essen ?

wünsche frohe weihnachten und nen guten rutsch,
besonderen gruß an gast von Langenbieber..we have much matsch here !
 

Zurück
Oben