Ciao a tutti, ho scritto un programma che data la mail e la password ritorna il numero di mail non lette ogni 5 minuti nella propria casella di posta.
Funziona perfettamente attraverso un ciclo di questo tipo:

codice:
while(connected){
    if(inbox.getUnreadMessageCount() != 0)
         System.out.println("Unread messages: " + inbox.getUnreadMessageCount());
    else
         System.out.println("No new messages"); 
                
    Thread.sleep(1000 * 60 * 5);
}
la variabile connected l'ho impostata a true per verificare la correttezza del programma.

Ora vorrei realizzare la parte grafica, cioè 1 finestra con 2 campi, rispettivamente JTextField (Username) e JPasswordField (Password) e un pulsante (Connetti/Disconnetti).
La mia intenzione era settare connected a false e attraverso un actionListener sul click del JButton portare connected a true e assegnare username e password per la connessione.
Ma...mentre da terminale lo Scanner attende l'iserimento, qui il programma va avanti e trovando username e password a null da errore.

Qualche consiglio?
Grazie in anticipo...posto qui in basso qualche riga di codice

codice:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class GUI extends JFrame implements ActionListener{
    public Image icon = Toolkit.getDefaultToolkit().getImage("C:\\Users\\*****\\Documents\\NetBeansProjects\\MailNotifier\\icon.png");
    public JPanel panel;
    public JTextField user; 
    public JButton b;
    public JPasswordField pwd;
    public JLabel userlab; 
    public JLabel pwdlab;
    public JCheckBox check;
    public JLabel res;

    Connection aux = new Connection();
    
    public GUI(){
        setTitle("Mail Notifier");
        
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        
        setIconImage(icon);
        setSize(400, 350);
        setLocation((screenSize.width / 2) - (getWidth() / 2), (screenSize.height / 2) - (getHeight() / 2));
        setResizable(false);
        
        panel = new JPanel();
        panel.setLayout(null);
        
        Insets insets = panel.getInsets();

        userlab = new JLabel("Username");
        Dimension userlabsize = userlab.getPreferredSize();
        userlab.setBounds(25 + insets.left, 25 + insets.top, userlabsize.width, userlabsize.height);
        panel.add(userlab);
        
        user = new JTextField(30);
        Dimension usersize = user.getPreferredSize();
        user.setBounds(25 + insets.left, 50 + insets.top, usersize.width, usersize.height);
        panel.add(user);
        
        pwdlab = new JLabel("Password");
        Dimension pwdlabsize = pwdlab.getPreferredSize();
        pwdlab.setBounds(25 + insets.left, 100 + insets.top, pwdlabsize.width, pwdlabsize.height);
        panel.add(pwdlab);
        
        pwd = new JPasswordField(30);
        Dimension pwdsize = pwd.getPreferredSize();
        pwd.setBounds(25 + insets.left, 125 + insets.top, pwdsize.width, pwdsize.height);
        panel.add(pwd);
        
        check = new JCheckBox("Show password field");
        Dimension checksize = check.getPreferredSize();
        check.setBounds(22 + insets.left, 150 + insets.top, checksize.width, checksize.height);
        panel.add(check);
        
        b = new JButton("Connect");
        Dimension bsize = b.getPreferredSize();
        b.setBounds(200 + insets.left - bsize.width, 200 + insets.top, bsize.width * 2, bsize.height);
        panel.add(b);
        
        res = new JLabel("Unread messages: " /*+*/ );
        Dimension ressize = res.getPreferredSize();
        res.setBounds(200 + insets.left - ressize.width / 2, 250 + insets.top, ressize.width, ressize.height);
        panel.add(res);
        
        check.addActionListener(this);
        b.addActionListener(this);
        
        this.getContentPane().add(panel);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        setVisible(true);
    }
   
    @Override
    public void actionPerformed(ActionEvent ae){
        if(ae.getSource() == check){
            if(check.isSelected())
                pwd.setEchoChar((char) 0); 
            else
                pwd.setEchoChar('•');
        }
        else if(ae.getSource() == b){ 
                aux.username = user.getText();
                aux.password = String.valueOf(pwd.getPassword()); 
                b.setText("Disconnect");
                aux.connected = true;
        }
    }
}
e
codice:
import java.util.*;
import javax.mail.*;

public class Connection{
    public Folder inbox;
    public String username;
    public String password;
    public boolean connected = false;
    
    public Connection(){
        Properties props = System.getProperties();
        props.setProperty("mail.store.protocol", "imaps");
        
        try{
            Session session = Session.getDefaultInstance(props, null);
            Store store = session.getStore("imaps");

            store.connect("imap.gmail.com", username, password);

            inbox = store.getFolder("Inbox");
            
            while(connected){
                if(inbox.getUnreadMessageCount() != 0)
                    System.out.println("Unread messages: " + inbox.getUnreadMessageCount());
                else
                   System.out.println("No new messages"); 
                
                Thread.sleep(1000 * 60 * 5);
            }
        }
        catch(MessagingException e){
            System.out.println("Error1");
        }
        catch(InterruptedException e){
            System.out.println("Error2");
        }
    }
}