2014-02-24 4 views
0

사용자가 전화 번호를 입력하는 텍스트 필드와 사용자가 이동 통신사의 SMS 게이트웨이를 선택하여 Java 응용 프로그램에서 휴대폰으로 전자 메일을 보내는 콤보 상자가 있습니다. 내가 사용하는 때 나는,JComboBox에서 SMS 관련 문자열

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

또는

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

내가 오류를 얻고 SMS가 전송하지 않습니다를 텍스트 필드에서 문자열을 잡아 아무 문제가 없지만,하고 있습니다. 여기

는 SMS 메시징 관련 내 코드의 부품 콤보입니다

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(); 
    } 
} 

...

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

당신이 만약 내 응용 프로그램에서 더 많은 코드가 필요하므로 제공하기가 더 쉽습니다.

+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를 사용하여 디버그했으며, 선택하면 모두 인쇄됩니다. SMS를 보내는 것은 행운이 없습니다. – user3308568

+0

@ user3308568 JComboBox에 문제가 없다는 것을 의미합니다. 하드 코딩 된 문자열로 모든 문제를 재현 할 수 있습니까 (모든 스윙 구성 요소 제거)? 그렇다면 그 예를 가지고 게시 편집을 제안 할 것입니다. 또한 예외가 발생하면 스택 추적이 도움이됩니다. –

관련 문제