我正试图使netbeans中的电子邮件客户端发送电子邮件,但我在我的代码中得到numberformatexception。这是我的代码(有三个类):
EmailClient.java
package sendemail;
public class EmailClient extends javax.swing.JFrame {
SendMail sm=new SendMail();
Settings set=new Settings();
public EmailClient() {
initComponents();
}
@SuppressWarnings("unchecked")
+Generated code
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
sm.setVisible(true);
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
set.setVisible(true);
}
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new EmailClient().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JMenu jMenu4;
private javax.swing.JMenu jMenu5;
private javax.swing.JMenuBar jMenuBar2;
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
// End of variables declaration
}
Settings.java
package sendemail;
import javax.swing.*;
import java.awt.*;
public class Settings extends javax.swing.JFrame {
public String uname;
public String pass;
public String smtpserver;
public String port;
/**
* Creates new form Settings
*/
public Settings() {
initComponents();
}
public String getUname() {
return uname;
}
public String getPass() {
return pass;
}
public String getSmtpserver() {
return smtpserver;
}
public String getPort() {
return port;
}
@SuppressWarnings("unchecked")
+Generated Code
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
uname=jTextField1.getText().toString();
pass=jPasswordField1.getPassword().toString();
smtpserver=jComboBox1.getSelectedItem().toString();
port=jComboBox2.getSelectedItem().toString();
if(uname.equals("") || pass.equals("") || smtpserver.equals("") || port.equals("") )
{
JOptionPane.showMessageDialog(this,"All Fields are mandatory");
}
else
{
setVisible(false);
}
}
private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Settings().setVisible(false);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JComboBox jComboBox1;
private javax.swing.JComboBox jComboBox2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JPanel jPanel1;
private javax.swing.JPasswordField jPasswordField1;
private javax.swing.JTextField jTextField1;
// End of variables declaration
}
SendMail.Java
package sendemail;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.swing.JOptionPane;
import java.awt.*;
import javax.mail.*;
import javax.mail.MessagingException;
public class SendMail extends javax.swing.JFrame {
Settings setfrm=new Settings();
String subject;
String from;
public SendMail() {
initComponents();
}
@SuppressWarnings("unchecked")
+Generated Code
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try
{
final String user=setfrm.getUname();
final String password=setfrm.getPass();
String portnum=setfrm.getPort();
String smtpname=setfrm.getSmtpserver();
String to=jTextField1.getText();
subject=jTextField2.getText();
Properties properties=new Properties();
properties.put("mail.smtp.host",smtpname.toString());
properties.put("mail.smtp.socketFactory.port",portnum.toString());
properties.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.port",portnum.toString());
properties.put("mail.smtp.auth","true");
Session session=Session.getDefaultInstance(properties,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(user,password);
}
}
);
MimeMessage message=new MimeMessage(session);
message.setFrom(new InternetAddress(user));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(jTextField1.getText().toString()));
message.setSubject(subject);
message.setText(jTextArea1.getText());
Transport.send(message);
JOptionPane.showMessageDialog(null,"message sent");
}
catch(MessagingException mex)
{
JOptionPane.showMessageDialog(null,mex);
}
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new SendMail().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
// End of variables declaration
}
错误:java.lang.NumberFormatException: For input string: "null"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:145)
at javax.mail.Service.connect(Service.java:297)
at javax.mail.Service.connect(Service.java:156)
at javax.mail.Service.connect(Service.java:105)
at com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:93)
at javax.mail.Transport.send0(Transport.java:168)
at javax.mail.Transport.send(Transport.java:98)
at sendemail.SendMail.jButton1ActionPerformed(SendMail.java:177)
at sendemail.SendMail.access$100(SendMail.java:25)
at sendemail.SendMail$2.actionPerformed(SendMail.java:77)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3311)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
BUILD STOPPED (total time: 1 minute 2 seconds)
I am trying to send Email with SendMail.java while the sender's email and password is entered from Settings.java and the EmailClient.java is just for setting JFrames visibility to true or false on button click
.
java.lang.NumberFormatException: For input string: “null”
据我所知,当你试图发送电子邮件时,唯一可以解析为数字(并给你这样的例外)的字段是端口号。说到这里,你可以从Settings
类的组合框中选择端口号:
port = jComboBox2.getSelectedItem().toString();
并在您的SendEmail
类属性中设置此端口号:
String portnum = setfrm.getPort();
...
Properties properties = new Properties();
...
properties.put("mail.smtp.port", portnum.toString());
在您的代码中,您不需要向组合框中添加任何对象。至少你没有显示这部分,但你必须在某个地方这样做,否则你会在这里得到NullPointerException
:
port = jComboBox2.getSelectedItem().toString();
然而port
可能持有"null"
字符串,因此下面的调用抛出异常:
Integer.parseInt("null"); // called somewhere within com.sun.mail.smtp.SMTPTransport.protocolConnect() method
我认为dic19的回应以及对你问题的评论让你很好地了解问题在哪里。就我而言,我想说的是(希望你觉得有用):
// line numbers added by me for reference
1: MimeMessage message=new MimeMessage(session);
2: message.setFrom(new InternetAddress(user));
3: message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(jTextField1.getText().toString()));
4: message.setSubject(subject);
5: message.setText(jTextArea1.getText());
6: Transport.send(message);
堆栈跟踪显示在Transport.send中抛出异常。因此,第3、4和5行中的任何参数都是罪魁祸首。
最简单的方法是将第3、4和5行中的参数临时赋值给局部变量: // validate your arguments first, always
final String recipient = InternetAddress.parse(jTextField1.getText().toString());
if( recipient == null || recipient.trim().length() == 0 )
{
throw sometypeofruntimeexception...
}
final String text = jTextArea1.getText());
if( text == null )
{
throw sometypeofruntimeexception...
}
if( session == null ){ throw sometypeofruntimeexception... }
if( user == null ){ throw sometypeofruntimeexception... }
// now you are ready to build your message
MimeMessage message=new MimeMessage(session);
message.setFrom(new InternetAddress(user));
message.setRecipients(Message.RecipientType.TO, recipient);
message.setSubject(subject);
message.setText(test);
Transport.send(message);
定期验证您的参数,这样,当出现错误时,您就能更好地掌握问题所在。