2010-05-15 16 views
0

J'ai essayé d'afficher des emails récupérés dans un JTable en utilisant le module JavaMail. Cependant, quand je demande au programme de définir la valeur, il ne le fait jamais. J'ai travaillé dans NetBeans si c'est de l'aide? la classe fetchMail trouve tout peut sur un serveur. La classe GUI est utilisée pour afficher tous les emails dans une table ainsi que pour créer du courrier.Affichage d'emails dans un JTable (Java Swing)

Vous penserez probablement que je l'ai essayé comme un taureau dans un magasin de porcelaine, je suis nouveau à Java et essaye de me donner un défi. Toute aide/conseil serait grandement apprécié

fetchmail:

package mail; 

import java.util.*; 
import java.io.*; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import javax.mail.*; 
import javax.mail.internet.*; 
import javax.mail.search.*; 
import javax.activation.*; 

public class fetchMail { 

    public void fetch(String username, String pass, String search) { 
     MessagesTableModel tableModel = new MessagesTableModel(); 
     String complete; 
     DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
     gui gui = new gui(); 
     // SUBSTITUTE YOUR ISP's POP3 SERVER HERE!!! 
     String host = "imap.gmail.com"; 
     // SUBSTITUTE YOUR USERNAME AND PASSWORD TO ACCESS E-MAIL HERE!!! 
     String user = username; 
     String password = pass; 
     // SUBSTITUTE YOUR SUBJECT SUBSTRING TO SEARCH HERE!!! 
     String subjectSubstringToSearch = search; 

     // Get a session. Use a blank Properties object. 
     Session session = Session.getInstance(new Properties()); 
     Properties props = System.getProperties(); 
     props.setProperty("mail.store.protocol", "imaps"); 
     props.setProperty("mail.imap.socketFactory.class", 
      "javax.net.ssl.SSLSocketFactory"); 
     props.setProperty("mail.imap.socketFactory.fallback", "false"); 
     try { 

      // Get a Store object 
      Store store = session.getStore("imaps"); 
      store.connect(host, user, password); 

      // Get "INBOX" 
      Folder fldr = store.getFolder("INBOX"); 
      fldr.open(Folder.READ_WRITE); 
      int count = fldr.getMessageCount(); 
      System.out.println(count + " total messages"); 


      // Message numebers start at 1 
      for (int i = 1; i <= count; i++) { 
       // Get a message by its sequence number 
       Message m = fldr.getMessage(i); 

       // Get some headers 
       Date date = m.getSentDate(); 
       int pos = i - 1; 
       String d = df.format(date); 
       Address[] from = m.getFrom(); 
       String subj = m.getSubject(); 
       String mimeType = m.getContentType(); 
       complete = date + "\t" + from[0] + "\t" 
        + subj + "\t" + mimeType; 
       //tableModel.setMessages(m); 
       gui.setDate(d, pos); 

       // System.out.println(d + " " + i); 
      } 

      // Search for e-mails by some subject substring 
      String pattern = subjectSubstringToSearch; 
      SubjectTerm st = new SubjectTerm(pattern); 
      // Get some message references 
      Message[] found = fldr.search(st); 

      System.out.println(found.length 
       + " messages matched Subject pattern \"" 
       + pattern + "\""); 

      for (int i = 0; i < found.length; i++) { 
       Message m = found[i]; 
       // Get some headers 
       Date date = m.getSentDate(); 
       Address[] from = m.getFrom(); 
       String subj = m.getSubject(); 
       String mimeType = m.getContentType(); 
       //System.out.println(date + "\t" + from[0] + "\t" + 
       //     subj + "\t" + mimeType); 

       Object o = m.getContent(); 
       if (o instanceof String) { 
        // System.out.println("**This is a String Message**"); 
        // System.out.println((String)o); 
       } else if (o instanceof Multipart) { 
        // System.out.print("**This is a Multipart Message. "); 
        Multipart mp = (Multipart) o; 
        int count3 = mp.getCount(); 
        // System.out.println("It has " + count3 + 
        // " BodyParts in it**"); 
        for (int j = 0; j < count3; j++) { 
         // Part are numbered starting at 0 
         BodyPart b = mp.getBodyPart(j); 
         String mimeType2 = b.getContentType(); 
         // System.out.println("BodyPart " + (j + 1) + 
         //      " is of MimeType " + mimeType); 

         Object o2 = b.getContent(); 
         if (o2 instanceof String) { 
          // System.out.println("**This is a String BodyPart**"); 
          // System.out.println((String)o2); 
         } else if (o2 instanceof Multipart) { 
          // System.out.print(
          // "**This BodyPart is a nested Multipart. "); 
          Multipart mp2 = (Multipart) o2; 
          int count2 = mp2.getCount(); 
          // System.out.println("It has " + count2 + 
          // "further BodyParts in it**"); 
         } else if (o2 instanceof InputStream) { 
          // System.out.println(
          // "**This is an InputStream BodyPart**"); 
         } 
        } //End of for 
       } else if (o instanceof InputStream) { 
        // System.out.println("**This is an InputStream message**"); 
        InputStream is = (InputStream) o; 
        // Assumes character content (not binary images) 
        int c; 
        while ((c = is.read()) != -1) { 
         // System.out.write(c); 
        } 
       } 

       // Uncomment to set "delete" flag on the message 
       //m.setFlag(Flags.Flag.DELETED,true); 

      } //End of for 

      // "true" actually deletes flagged messages from folder 
      fldr.close(true); 
      store.close(); 

     } catch (MessagingException mex) { 
      // Prints all nested (chained) exceptions as well 
      mex.printStackTrace(); 
     } catch (IOException ioex) { 
      ioex.printStackTrace(); 
     } 
    } 
} 

IUG:

/** 
* gui.java 
* 
* Created on 13-May-2010, 18:29:30 
*/ 
package mail; 

import java.text.DateFormat; 
import java.text.FieldPosition; 
import java.text.ParsePosition; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Vector; 
import javax.mail.Address; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.ListSelectionModel; 
import javax.swing.event.ListSelectionEvent; 
import javax.swing.event.ListSelectionListener; 
import javax.swing.event.TableModelListener; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.TableModel; 

public class gui extends javax.swing.JFrame { 

    private MessagesTableModel tableModel; 
// Table listing messages. 
    private JTable table; 
    String date; 

    /** Creates new form gui */ 
    public gui() { 

     initComponents(); 
    } 

    @SuppressWarnings("unchecked") 
    private void initComponents() { 

     recieve = new javax.swing.JButton(); 
     jButton1 = new javax.swing.JButton(); 
     jScrollPane1 = new javax.swing.JScrollPane(); 
     inboxTable = new javax.swing.JTable(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     recieve.setText("Receve"); 
     recieve.addActionListener(new java.awt.event.ActionListener() { 

      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       recieveActionPerformed(evt); 
      } 
     }); 

     jButton1.setText("new"); 
     jButton1.addActionListener(new java.awt.event.ActionListener() { 

      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton1ActionPerformed(evt); 
      } 
     }); 

     inboxTable.setModel(new javax.swing.table.DefaultTableModel(
      new Object[][]{ 
       {null, null, null}, 
       {null, null, null}, 
       {null, null, null}, 
       {null, null, null} 
      }, 
      new String[]{ 
       "Date", "subject", "sender" 
      }) { 

      Class[] types = new Class[]{ 
       java.lang.String.class, java.lang.String.class, java.lang.String.class 
      }; 

      public Class getColumnClass(int columnIndex) { 
       return types[columnIndex]; 
      } 
     }); 
     jScrollPane1.setViewportView(inboxTable); 
     inboxTable.getColumnModel().getColumn(0).setResizable(false); 
     inboxTable.getColumnModel().getColumn(1).setResizable(false); 
     inboxTable.getColumnModel().getColumn(2).setResizable(false); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(39, 39, 39).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 558, javax.swing.GroupLayout.PREFERRED_SIZE).addGroup(layout.createSequentialGroup().addComponent(recieve).addGap(18, 18, 18).addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE))).addGap(73, 73, 73))); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(31, 31, 31).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(recieve).addComponent(jButton1)).addGap(18, 18, 18).addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 258, javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap(179, Short.MAX_VALUE))); 

     pack(); 
    }// </editor-fold> 

    private void recieveActionPerformed(java.awt.event.ActionEvent evt) { 
     fetchMail fetch = new fetchMail(); 
     fetch.fetch("email goes here, password goes here, search goes here"); 
    } 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 

     createMail create = new createMail(); 
     centerW center = new centerW(); 
     //create.attVis(); 
     center.center(create); 
     create.setVisible(true); 
    } 

    public void setDate(String Date, int pos) { 

     //pos = pos + 1; 

     String[] s = new String[5]; 
     s[pos] = Date; 

     inboxTable.setValueAt(Date, pos, 0); 
    } 

    public String getDate() { 
     return date; 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       new gui().setVisible(true); 

      } 
     }); 
    } 
// Variables declaration - do not modify 
    private javax.swing.JTable inboxTable; 
    private javax.swing.JButton jButton1; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JButton recieve; 
// End of variables declaration 
} 

Répondre

1

Cependant quand je demande au programme pour définir la valeur il ne fait jamais.

Eh bien, je n'ai aucune idée de ce que cela signifie.

Vous devez prendre du recul et simplifier le problème. Votre programme essaie de faire 2 choses:

a) lire des messages en utilisant JavaMail b) affichage info email en fonction de votre question JTable

Je ne peux pas dire si le problème est « un » ou " b ". Par conséquent, si le problème est a), vous devez créer un programme simple qui utilise un groupe de System.out.println (...) pour afficher les données renvoyées à partir de votre requête d'e-mail.

Si le problème est b) alors vous devez d'abord apprendre à créer une table à l'aide codés en dur « données email »

Une fois que vous résoudre des problèmes a et b séparement vous les mettre ensemble et vous avez une solution.

Le code que vous avez posté n'est pas exécutable, donc nous ne pouvons pas vraiment vous aider. Si vous avez besoin de plus d'aide poster votre SSCCE.