2014-02-24 39 views
0

我有一个用户输入电话号码的文本框,以及用户选择运营商的短信网关将SMS电子邮件从Java应用程序发送到手机的组合框。我有没有问题从一个文本框抓住一个字符串,但是当我使用,JComboBox到涉及SMS的字符串

String gateway = (String)comboBox_1.getSelectedItem(); 

,或者

String gateway = comboBox_1.getSelectedItem().toString(); 

我得到的错误和短信不会发。

这里是我的代码,涉及到的短信和部分下拉框中:

final String[] carriers = {"@txt.att.net", "@myboostmobile.com", "@messaging.sprintpcs.com", "@tmomail.net", "@vtext.com"}; 

...

JComboBox comboBox_1 = new JComboBox(carriers); 
    comboBox_1.setSelectedIndex(-1); 
    contentPane.add(comboBox_1); 
    comboBox_1.setRenderer(new PromptComboBoxRenderer("Select Carrier Gateway")); 
    ((JLabel)comboBox_1.getRenderer()).setHorizontalAlignment(SwingConstants.CENTER); 

    textField_1 = new JTextField(); 
    contentPane.add(textField_1); 
    textField_1.setColumns(10); 
    textField_1.setHorizontalAlignment(JLabel.CENTER); 

...

public class SMTPSend { 

    public SMTPSend() { 
    } 

    public void msgSafe() { 

     String number = textField_1.getText(); 
     String gateway = (String)comboBox_1.getSelectedItem(); 
     // alternatively tried .toString() 
     String username = "[email protected]"; 
     String password = "password"; 
     String smtphost = "smtp.gmail.com"; 
     String compression = "subject"; 
     String from = "[email protected]"; 
     String to = number + gateway; // where number is the 10 digit phone number and gateway is @SMS_Gateway 
     String body = "Hello World!"; 
     Transport myTransport = null; 

try { 
Properties props = System.getProperties(); 
props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.socketFactory.port", "465"); 
    props.put("mail.smtp.socketFactory.class", 
      "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.port", "465"); 

Session mailSession = Session.getDefaultInstance(props, null); 
Message msg = new MimeMessage(mailSession); 
msg.setFrom(new InternetAddress(from)); 
InternetAddress[] address = {new InternetAddress(to)}; 
msg.setRecipients(Message.RecipientType.TO, address); 
msg.setSubject(compression); 
msg.setText(body); 
msg.setSentDate(new Date()); 

myTransport = mailSession.getTransport("smtp"); 
    myTransport.connect(smtphost, username, password); 
    msg.saveChanges(); 
    myTransport.sendMessage(msg, msg.getAllRecipients()); 
    myTransport.close(); 
} 
catch (Exception e) { 
    e.printStackTrace(); 
    } 
} 

如果您需要从我的应用程序得到更多的代码,我非常乐意提供。

+1

你会得到什么错误? –

+1

发布一个[最小完整示例](http://stackoverflow.com/help/mcve)更快得到更好的帮助 – Reimeus

回答

1

我的猜测是,您没有选择任何一个运营商,因此当您询问所选商品时,会返回null值。这个演示似乎有效 - 你能重现它的问题吗?

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

public class ComboBoxDemo extends JPanel{ 

    public ComboBoxDemo(){ 

     final JComboBox cb = new JComboBox(new String[]{"@txt.att.net", "@myboostmobile.com", "@messaging.sprintpcs.com", "@tmomail.net", "@vtext.com"}); 
     cb.setSelectedIndex(-1); 

     JButton button = new JButton("Print Selection"); 
     button.addActionListener(new ActionListener(){ 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       if(cb.getSelectedIndex() != -1) 
        System.out.println(cb.getSelectedItem()); 
       else 
        System.out.println("Not selected"); 
      }}); 


     add(cb); 
     add(button); 
    } 

    public static void main(String[] args){ 
     final JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new ComboBoxDemo()); 
     frame.pack(); 
     frame.setSize(400, 300); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+0

是的,我使用s.o.p进行调试,它们在选择时都会打印。虽然发送短信但没有运气。 – user3308568

+0

@ user3308568这很可能意味着问题不在JComboBox中。你能用硬编码的字符串重现问题吗(摆脱所有的摆动组件)?如果是这样,我会建议编辑你发布只有这样的例子。另外,如果抛出异常,堆栈跟踪会有所帮助。 –

相关问题