tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von sheel
  • 1 Beitrag von sheel
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
692
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    Ich muß für die Schule ein EMail Programm schreiben und bei dem Übergeben der Werte mit geter Methoden hat dann ein Teil null werte und ich weiß nicht was ich falsch mache kann mir eventuell wer helfen?

    Meine Main kurz und knackig:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    package GUI;
     
    public class Main_E_Mail 
    {
        public static void main (String[]args)
        {
            Oberflaeche_Main OM = new Oberflaeche_Main();
            OM.los();
        }
     
    }

    Das ist die Main Oberfläche die sie Senden initialisiert und mit dem Button startet man dann die Benutzereingabeoberfläche:
    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
    
    package GUI;
     
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.BoxLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
     
    import Programm.Senden;
     
     
    public class Oberflaeche_Main extends JFrame implements ActionListener
    {
        private JFrame mainFrame;
        private JPanel pnlNorth,pnlFrom,pnlTo,pnlBetreff;
        private JLabel lblFrom,lblTo,lblBetreff;
        private JTextField txtFFrom,txtFTo,txtFBetreff;
        private JTextArea txtAEingabe;
        private JButton btnSenden;
        
        Senden senden;
        
        public void los()
        {
            
            mainFrame=new JFrame("E-Mail versenden");//Mainframe erzeugen
            mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            
            
            pnlNorth=new JPanel();
            pnlNorth.setLayout(new BoxLayout(pnlNorth, BoxLayout.Y_AXIS));
            
                pnlFrom=new JPanel();
                
                    lblFrom=new JLabel("From: ");
                    pnlFrom.add(lblFrom);
                    
                    txtFFrom=new JTextField(30);
                    pnlFrom.add(txtFFrom);
                pnlNorth.add(pnlFrom);
                
                pnlTo=new JPanel();
                    
                    lblTo=new JLabel("To: ");
                    pnlTo.add(lblTo);
                    
                    txtFTo= new JTextField(30);
                    pnlTo.add(txtFTo);
                pnlNorth.add(pnlTo);
                
                pnlBetreff=new JPanel();
                
                    lblBetreff=new JLabel("Betreff: ");
                    pnlBetreff.add(lblBetreff);
                    
                    txtFBetreff=new JTextField(30);
                    pnlBetreff.add(txtFBetreff);
                pnlNorth.add(pnlBetreff);
                
            mainFrame.getContentPane().add(BorderLayout.NORTH,pnlNorth);
                    
            
            txtAEingabe=new JTextArea(20,20);
            mainFrame.getContentPane().add(BorderLayout.CENTER,txtAEingabe);
            
            btnSenden=new JButton("Senden");
            btnSenden.addActionListener(this);
            mainFrame.getContentPane().add(BorderLayout.SOUTH,btnSenden);
            
            mainFrame.setSize(600, 350);
            mainFrame.setVisible(true);
            
        }
        
        
        public void actionPerformed(ActionEvent e)
        {
            if (e.getSource()== btnSenden)
            {
                senden=new Senden();
                senden.setsFrom(txtFFrom.getText());
                senden.setsTo(txtFTo.getText());
                senden.setsSubjekt(txtFBetreff.getText());
                senden.setsText(txtAEingabe.getText());
                Oberflaeche_Benutzerdaten OberflBenutzerdaten =new Oberflaeche_Benutzerdaten();
                OberflBenutzerdaten.los();
            }
        }
            
    }

    Hier die Benutzereingabe Oberfläche:
    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
    
    package GUI;
     
    import java.awt.BorderLayout;
    import java.awt.Window;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowEvent;
     
    import javax.mail.MessagingException;
    import javax.mail.internet.AddressException;
    import javax.swing.BoxLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.WindowConstants;
     
    import Programm.Senden;
     
    public class Oberflaeche_Benutzerdaten extends JFrame implements ActionListener
    {
        private JFrame mainFrame;
        private JPanel pnlCenter,pnlBenutzer,pnlPasswort,pnlHost,pnlPort;
        private JLabel lblBenutzer,lblPasswort,lblHost,lblPort;
        private JTextField txtFBenutzer,txtFPasswort,txtFHost,txtFPort;
        private JButton btnBestaetigen;
        
        Senden senden;
        
        public void los()
        {
            mainFrame=new JFrame("Benutzerdaten eingeben");//Mainframe erzeugen
            mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            pnlCenter=new JPanel();
            pnlCenter.setLayout(new BoxLayout(pnlCenter, BoxLayout.Y_AXIS));
            
                pnlBenutzer=new JPanel();
                
                    lblBenutzer=new JLabel("Account Benutzername: ");
                    pnlBenutzer.add(lblBenutzer);
                    
                    txtFBenutzer=new JTextField(15);
                    pnlBenutzer.add(txtFBenutzer);
                    pnlCenter.add(pnlBenutzer);
                
                pnlPasswort=new JPanel();
                
                    lblPasswort=new JLabel("Account Passwort: ");
                    pnlPasswort.add(lblPasswort);
                    
                    txtFPasswort=new JTextField(15);
                    pnlPasswort.add(txtFPasswort);
                    pnlCenter.add(pnlPasswort);
                
                pnlHost =new JPanel();
                
                    lblHost=new JLabel("Host z.B. mail.gmx.de : ");
                    pnlHost.add(lblHost);
                    
                    txtFHost=new JTextField(15);
                    pnlHost.add(txtFHost);
                    pnlCenter.add(pnlHost);
                
                pnlPort= new JPanel();
                
                    lblPort= new JLabel("Port z.B. 25 : ");
                    pnlPort.add(lblPort);
                    
                    txtFPort=new JTextField(15);
                    pnlPort.add(txtFPort);
                    pnlCenter.add(pnlPort);
            
            mainFrame.getContentPane().add(BorderLayout.CENTER,pnlCenter);
            
            btnBestaetigen=new JButton("Bestätigen");
            btnBestaetigen.addActionListener(this);
            mainFrame.getContentPane().add(BorderLayout.SOUTH,btnBestaetigen);
            
            mainFrame.setSize(350, 200);
            mainFrame.setVisible(true);
        }
        
        public void actionPerformed(ActionEvent e)
        {
            if (e.getSource()== btnBestaetigen)
            {
                senden =new Senden();
                senden.setsUser(txtFBenutzer.getText());
                senden.setsPassword(txtFPasswort.getText());
                senden.setsHost(txtFHost.getText());
                senden.setsPort(txtFPort.getText());
                senden.Werteausgeben();
                try 
                {
                    senden.MailSenden();
                } 
                catch (AddressException e1) 
                {
                    e1.printStackTrace();
                } 
                catch (MessagingException e2) 
                {           
                    e2.printStackTrace();
                }
                
            }
        }
    }

    Und zu guter letzt die Klasse für das versenden die von der Benutzereingabe gestartet wird und die auch die ganzen getter und setter hat:

    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
    124
    125
    126
    127
    128
    129
    
    package Programm;
     
    import java.util.Properties;
     
    import javax.mail.Address;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.AddressException;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
     
    import GUI.Oberflaeche_Main;
     
    public class Senden 
    {
        String sFrom;       //von
        String sTo;         //an
        String sSubjekt;    //Betreff
        String sText;       //Text
        String sUser;       //Benutzer
        String sPassword;   //Password
        String sHost;       //Host
        String sPort;       //Port
        
        Oberflaeche_Main GUIMain =new Oberflaeche_Main();
        
        
        public void Werteausgeben()
        {
            System.out.println(""+getsFrom());
            System.out.println(""+getsTO());
            System.out.println(""+getsSubjekt());
            System.out.println(""+getsText());
            System.out.println(""+getsUser());
            System.out.println(""+getsPassword());
            System.out.println(""+getsHost());
            System.out.println(""+getsPort());
        }
     
      public void MailSenden() throws AddressException,MessagingException
      {
            Properties props = new Properties();
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.host", getsHost());
            props.put("mail.smtp.port", getsPort());
        
            Session session = Session.getDefaultInstance(props,null);
            
            Message msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(getsFrom()));
            msg.setRecipient(Message.RecipientType.TO, new InternetAddress(getsTO()));
            msg.setSubject(getsSubjekt());
            msg.setText(getsText());        
        
            Transport tr=new session.getTransport("smtp");
            tr.connect(getsHost(),getsUser(),getsHost());
            msg.saveChanges();
            tr.sendMessage(getsText(),msg.getAllRecipients());
            tr.close();
      }  
          public void setsFrom(String p_sfrom)
          {
              sFrom=p_sfrom;
          }
          public void setsTo(String p_sto)
          {
              sTo=p_sto;
          }
          public void setsSubjekt(String p_ssubjekt)
          {
              sSubjekt=p_ssubjekt;
          }
          public void setsText(String p_sText)
          {
              sText=p_sText;
          }
          public String getsFrom()
          {
              return sFrom;
          }
          public String getsTO()
          {
              return sTo;
          }
          public String getsSubjekt()
          {
              return sSubjekt;
          }
          public String getsText()
          {
              return sText;
          }
          public void setsUser(String p_sUser)
          {
              sUser=p_sUser;
          }
          public void setsPassword(String p_sPW)
          {
              sPassword=p_sPW;
          }
          public void setsHost(String p_sHost)
          {
              sHost=p_sHost;
          }
          public void setsPort(String p_sPort)
          {
              sPort=p_sPort;
          }
          
          public String getsUser()
          {
              return sUser;
          }
          public String getsPassword()
          {
              return sPassword;
          }
          public String getsHost()
          {
              return sHost;
          }
          public String getsPort()
          {
              return sPort;
          }
        
    }

    Ich bin für jede Hilfe dankbar.

    CU Eklaf
     

  2. #2
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Und WO übergibst du die Problemwerte?
     

  3. #3
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    Falls du die Throws meinst die werden in der Benutzeroberfläche aufgefangen sonst weiß ich nicht was du meinst ich programiere erst seit ca 10 monaten
     

  4. #4
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Er meint damit folgendes:

    Du wirfst uns hier zeilenweise Code an den Kopf, sagst aber nicht welche Zeile Probleme macht bzw. welche Werte null sind, obwohl sie es nicht sein sollten.
     

  5. #5
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    Oh mist mein Fehler sry also im letzten Code block sollen die ganzen Strings ja Zwischengespeichert werden und dann am ende auch benutzt werden allerdings die Strings From, To, Subjekt und Text die von der Oberflaeche_Main (2ter Codeblock) übergeben werden sind alle null nur die von der Oberflaeche_Benutzereingabe (3ter Codeblock) werden korrekt übergeben. woran liegt das?
     

  6. #6
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Du...
    -machst in der Oberfläche_Main ein neues Objekt von Senden
    -Weist 4 von 8 benötigten Werten zu
    -Startest den Oberfläche_Benutzerdaten-Teil
    -Erzeugst wieder ein Objekt von Senden
    -Und weist dem die anderen 4 Werte zu

    Merkst du was?

    Die "Senden" in Oberfläche_Main und Oberfläche_Benutzerdaten sind zwei verschiedene.
    Dem ersten weist du die vier einen Werte zu, dem zweiten die 4 anderen.
    Weiterverwendet von dir wird das zweite, dem natürlich die Werte vom ersten fehlen.

    Im Oberfläche_Benutzerdaten (beim actionperformed) darfst du kein "...=new Senden();" machen, denn ein neues Senden hast du schon im Oberfläche_Main.

    Übergib das Senden vom Main einfach in die Benutzerdaten, egal ob im Konstruktor oder im los()
    Konstruktor/Los() weist dann den übergebenen Wert der Variable senden zu, dafür kommt das "senden=new Senden();" in den Benutzerdaten weg.

    Gruß
    Eklaf bedankt sich. 

  7. #7
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    Das hatte ich mir schon fasst gedacht dass das 2te new zuviel ist
    Okay ich hab versucht was dazu zu finden aber ich bin zu d... wie geht das hab ich noch nie gemacht. kannst mir da bitte weiterhelfen?
     

  8. #8
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    1) Im Oberflaeche_Main, actionPerformed, letzte Codezeile schreibst du statt
    Code java:
    1
    
    OberflBenutzerdaten.los();
    das:
    Code java:
    1
    
    OberflBenutzerdaten.los(senden);

    2) Im Oberflaeche_Benutzerdaten musst du beim los eintragen dass es einen Parameter bekommt.
    Außerdem solltest du die Variable senden protected oder private machen.
    Im los musst du dann das übergebene Senden der Variable zuweisen, damits auch noch im actionPerformed verfügbar ist.
    Also
    Code java:
    1
    2
    3
    4
    5
    
    Senden senden;
     
    public void los()
    {
    //...
    wird zu
    Code java:
    1
    2
    3
    4
    5
    6
    
    private Senden senden;
     
    public void los(Senden variable)
    {
        senden=variable;
        //...Hier der restliche Code von los, kannst du unverändert stehenlassen

    3) Auch im Oberflaeche_Benutzerdaten, bei actionPerformed
    kommt die Zeile ersatzlos weg:
    Code java:
    1
    
    senden=new Senden();

    Fertig
    Eklaf bedankt sich. 

  9. #9
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    AAAAAAAAAAAAHHHHHHHHHHHHHHHHH geil es geht dank dir vielmals jetzt kann ich wieder ruhig schlafen danke danke danke

    bis zum nächsten mal
     

  10. #10
    MiMi MiMi ist offline Mitglied Smaragd
    Registriert seit
    Sep 2007
    Beiträge
    1.177
    Neben dem Antworten Button ist ein Haeckchen, um das Thema als erledigt zu markieren Den darf man ohne Probleme benutzen
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 31.01.11, 12:00
  2. Antworten: 4
    Letzter Beitrag: 14.03.10, 17:49
  3. Antworten: 6
    Letzter Beitrag: 06.08.07, 14:03
  4. script für Datenbankeintrag/abfrage klappt nicht - finde den Fehler nicht
    Von germanius im Forum Relationale Datenbanksysteme
    Antworten: 10
    Letzter Beitrag: 06.06.04, 14:49
  5. Finde den Fehler nicht :-(
    Von HolgerX im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 07.05.04, 12:48

Stichworte