tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
3534
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Polli Polli ist offline Mitglied Silber
    Registriert seit
    Dec 2007
    Beiträge
    88
    Hallöchen,

    bin mal wieder hier und hab da mal wieder eine Frage...

    Ich mal ein programm geschrieben was aus einer XML-Datei Daten ausliest. Habe dadurch logischerweise den Pfad der XML-Datei angegeben und zwar mit der Variable "filename".
    Danach habe ich die Datei in einer anderen Klasse bearbeitet und nun sollte ich eine GUI-Oberfläche dafür zaubern (wo bei mir auch zT von euch schon geholfen wurde ).

    Mein Frage lautet nun:

    Wie kann ich die Datei über den Pfad den ich durch den JFileChooser rausgesucht habe, in die Klasse implementieren, wo ich den Pfad nutzen muss, damit alle Klassen funktionieren?

    OMG hab ich kompliziert geschrieben


    kurzes Bsp. wie weit ich bin:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    
        ActionListener openA = new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                JFileChooser fc = new JFileChooser(); 
                fc.setFileFilter( new FileFilter() 
                { 
                  @Override public boolean accept( File f ) 
                  { 
                    return f.isDirectory() || 
                      f.getName().toLowerCase().endsWith( ".xml");
                  } 
                  @Override public String getDescription() 
                  { 
                    return "XML (*.xml)"; 
                  } 
                } ); 
             
                int state = fc.showOpenDialog( null ); 
                    if ( state == JFileChooser.APPROVE_OPTION ) 
                    { 
                      File file = fc.getSelectedFile(); 
                      System.out.println(file.getAbsolutePath());
                      A.setText(file.getAbsolutePath());
                      String a = file.getAbsolutePath();
                      try
                      {
                          Desktop.getDesktop().open( new File(a) );
                      }
                      catch(IOException f)
                      {
                          
                      }
                      System.out.println(a);
                      DA.setFilename(a);
                      System.out.print(DA.getFilename());
                      A.setText(a);
                      DA.filename = a;
                    } 
            }
        };

    Somit habe ich auf "DA.setFilename(a);" den Pfad und den mag ich nun in meine andere Klasse einfügen, so weit komme ich aber nicht weil mir nach dem auslesen immer eine "NullPointException" angeziegt wird und eine ewig lange Fehlermeldung...



    Kann mir jemand dabei helfen?
     

  2. #2
    Avatar von Matze
    Matze Matze ist offline Weltenwanderer
    Registriert seit
    Jul 2007
    Ort
    Die Welt
    Beiträge
    1.504
    Blog-Einträge
    7
    1. Fehlermeldung Posten
    2. Um Zugriff von einem Objekt auf Variablen eines anderen verwendet man getter Methoden (getXXX()).
     
    "... Jeder von uns ist Kunst... gezeichnet vom Leben" (Casper)

    "Sir?, we're sorrounded!"
    "Excellent, we can attack in any direction"

  3. #3
    Polli Polli ist offline Mitglied Silber
    Registriert seit
    Dec 2007
    Beiträge
    88
    Hier ist die Fehlermeldung:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    [COLOR="Red"]Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at Layout1$4.actionPerformed(Layout1.java:93)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)[/COLOR]
     

  4. #4
    Polli Polli ist offline Mitglied Silber
    Registriert seit
    Dec 2007
    Beiträge
    88
    Hab mal ein kurzes Beispiel gemacht, wie es in etwa aussieht:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.*;
    import javax.swing.filechooser.FileFilter;
     
     
    public class ButText 
    {
        testen t = new testen();
        public String ap; 
        
        JFrame f = new JFrame(); 
        Container c = f.getContentPane(); 
        static GridBagLayout gbl = new GridBagLayout(); 
     
        ActionListener open = new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                JFileChooser fc = new JFileChooser(); 
                fc.setFileFilter( new FileFilter() 
                { 
                  @Override public boolean accept( File f ) 
                  { 
                    return f.isDirectory() || 
                      f.getName().toLowerCase().endsWith( ".txt");
                  } 
                  @Override public String getDescription() 
                  { 
                    return "Text (*.txt)"; 
                  } 
                } ); 
             
                int state = fc.showOpenDialog( null ); 
             
                if ( state == JFileChooser.APPROVE_OPTION ) 
                { 
                  File file = fc.getSelectedFile(); 
                  file.getAbsolutePath();
                  System.out.println(file.getAbsolutePath());
                  A.setText(file.getAbsolutePath());
                  String p = file.getAbsolutePath();
                  ap = file.getAbsolutePath();
                  t.setFilename(ap);
                  System.out.print(t.getFilename());
                } 
            }
        };
     
        //ÜBERSCHRIFT
        JLabel Ueschrift = new JLabel("<html><FONT SIZE = 6><u>Überschrift</u></font></html>");
        
        //TextFeld
        JTextField A  = new JTextField();
        
        //IMAGE
        final Icon smallIcon = new ImageIcon( JMenu.class.getResource("/images/magnifier.png") );
       
        //Button
        JButton LupeA    = new JButton(smallIcon)   ;
     
        public void ButtonPress()
        {
            LupeA.addActionListener(open)  ;
        }
        
        public void init()
        {
            f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 
            c.setLayout( gbl ); 
            f.pack();
            f.setVisible(true);
            f.setLocation(128, 128);
            f.setSize( 350, 150 );
            f.setVisible( true );
        }
        
        static void addComponent( Container cont, 
                GridBagLayout gbl, 
                Component c, 
                int x, int y, 
                int width, int height, 
                int ipadx, int ipady,
                double weightx,
                Insets insets
                ) 
        { 
            GridBagConstraints gbc = new GridBagConstraints(); 
            gbc.fill = GridBagConstraints.VERTICAL; 
            gbc.insets = insets;
            gbc.gridx = x; gbc.gridy = y; 
            gbc.gridwidth = width; gbc.gridheight = height; 
            gbc.ipadx = ipadx; gbc.ipady = ipady;
            gbl.setConstraints( c, gbc ); 
            gbc.anchor = GridBagConstraints.WEST;
            cont.add( c ); 
        } 
     
        public void GridBLayout()
        {
            addComponent( c, gbl, Ueschrift,   0,  0, 16, 1,   0,  0, 1.0, new Insets( 0, 0,20, 0));
            
            addComponent( c, gbl, A,           11, 3,  4, 1, 250, 0, 0.1, new Insets( 0, 0, 0, 0));
            addComponent( c, gbl, LupeA,       15, 3,  1, 1,   0, 0, 0.0, new Insets( 0, 0, 0, 10));
        }
        
        public void run()
        {
            init();
            GridBLayout();
            ButtonPress();
        }
          public static void main( String[] args ) 
          { 
              ButText L = new ButText();
              L.run();
          }
     
        public String getAp() {return ap;}
        public void setAp(String ap) {this.ap = ap;}
     
    }

    und die andere Klasse wo die Variable "filename" genutzt werden soll:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    public class testen 
    {
        private String filename;
     
        public String getFilename() {return filename;}
     
        public void setFilename(String filename) {this.filename = filename;}
        
        public void te()
        {
            ButText bt = new ButText();
            bt.run();
            filename = bt.getAp();
            System.out.println("Das ist der Text: "+this.getFilename());
        }
        
        
        public static void main(String[] args) 
        {
     
            
            testen t = new testen();
            t.te();
        }
    }

    Büdde
     

  5. #5
    Polli Polli ist offline Mitglied Silber
    Registriert seit
    Dec 2007
    Beiträge
    88
    irgendwie ist es merkwürdig as ich grad gepostet habe, zeigt mir keine Fehlermeldung an
     

  6. #6
    Polli Polli ist offline Mitglied Silber
    Registriert seit
    Dec 2007
    Beiträge
    88
    Kann mir nicht jemand helfen
    Es funktioniert immer noch nicht....
    Büüüüüddddddddeeeee
     

  7. #7
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Also wenn man eine GUI zu einem bestehen Programm baut, dann ruft normalerweise die GUI die Methoden der bereits bestehenden Klassen auf.

    Also: Wenn du auf den Button klickst geht dein FileChooser auf. Sobald du den Dateinamen vom FileChooser bekommen hast, übergibst du diesen an deine Methode die die XML-Datei ausliest. Und nicht andersrum wie es deine testen-Klasse vermuten lässt (und Klassennamen bitte immer groß schreiben, Methodennamen klein und benutz am besten nicht run als Methodennamen. Das lässt immer auf einen Implementierung von Runnable.run schließen und das ist hier eher unglücklich).

    Noch eine Anmerkung: Sei bitte ein wenig geduldig. Viele haben erst nach der Arbeit Zeit hier reinzuschauen aber geantwortet wird dir eigentlich auf jeden Fall. Nur wenn man nervt kannst anders aussehen
     

  8. #8
    Polli Polli ist offline Mitglied Silber
    Registriert seit
    Dec 2007
    Beiträge
    88
    Danke für die Antwort, habe die Lösung nun aber schon.

    Sorry dass ich genervt habe, aber ich musste das heute fertig stellen...
     

  9. #9
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Und wie hast dus gelöst?
     

  10. #10
    Polli Polli ist offline Mitglied Silber
    Registriert seit
    Dec 2007
    Beiträge
    88
    So wie du es dann auch gesagt hast
    Weiß auch nicht was vorhin war, war irgendwie der Wurm drin

    Hab dann den Wert über public variablen, von einer Klasse in die nächste und dann in die eigentliche (da wo sie benötigt wird), dort wurde dann auch endlich der richtige Pfad im Debugger angezeigt und mit dem Rest muss ich mich nochmal genauer beschäftigen


    Danke nochmal und ein schönes Wochenende @ everybody
     

Ähnliche Themen

  1. Innerhalb einer Klasse eine Instanz einer anderen Klasse
    Von HackerNeo im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 17.11.09, 13:08
  2. Klasse in einer anderen Klasse verwerden?
    Von MadCrusher im Forum PHP
    Antworten: 29
    Letzter Beitrag: 16.02.08, 04:26
  3. Antworten: 2
    Letzter Beitrag: 06.02.06, 19:57
  4. Antworten: 4
    Letzter Beitrag: 09.07.05, 00:19
  5. Antworten: 2
    Letzter Beitrag: 12.04.05, 15:51