2016-12-24 2 views
0

Erstens, ich habe so ein Problem hier zuerst habe ich eine NullPointerException beim Versuch, eine Verbindung mit COM-Port 12, habe ich versucht, diese mehrere verschiedene Wege, indem Sie zuerst den Port auswählen und ihn danach suchen, indem Sie nach dem Port suchen und ihn ausprobieren. Das zweite Mal hielt ich diese 32-Bit-64-Bit-Mismatch-Ausnahme für meine RXTX lib immer so fixierte ich und kam dann mit diesem Fehler auf enter image description hereWarum kann ich nicht bekommen diese Karte über das Senden von SMS über GSM in Java initialisieren

So, nach diesem Fehler ich mein Modem-Modus (Huawei e3531) überprüft, dass Ich habe es benutzt und es von WCDMA in den GSM-Modus geschaltet. Was sollte ich jetzt tun? Hier ist mein Code: Das ist meine Klasse Connect

package sendMessage; 

import gnu.io.CommPortIdentifier; 
import gnu.io.CommPortOwnershipListener; 
import gnu.io.PortInUseException; 
import gnu.io.SerialPort; 
import gnu.io.SerialPortEvent; 
import gnu.io.SerialPortEventListener; 
import java.io.*; 
import java.util.*; 

public class Connect implements SerialPortEventListener, 
     CommPortOwnershipListener 
{ 

    static String comPort = ""; // This COM Port must be connect with GSM Modem or your mobile phone 
    private CommPortIdentifier portId = null; 
    private Enumeration<?> portList; 
    private InputStream inputStream = null; 
    private OutputStream outputStream = null; 
    private SerialPort serialPort; 

    public Connect(String comm) 
    { 

     Connect.comPort = comm; 
    } 

    public boolean init() 
    { 
     portList = CommPortIdentifier.getPortIdentifiers(); 
     while (portList.hasMoreElements()) 
     { 
      portId = (CommPortIdentifier) portList.nextElement(); 
      System.out.println(portId); 
      if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) 
      { 
       if (portId.getName().equals(comPort)) 
       { 
        return true; 
       } 
      } 
     } 
     return false; 
    } 

    public void checkStatus() 
    { 
     send("AT+CREG?\r\n"); 
    } 


    public void send(String cmd) 
    { 
     try 
     { 

      outputStream.write(cmd.getBytes()); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public void sendMessage(String phoneNumber, String message) 
    { 
     send("AT+CMGF=1\r"); 
     send("AT+CMGS=\"" + phoneNumber + "\"\r\n"); 
     send(message + '\032'); 
    } 


    public void connect() throws NullPointerException, PortInUseException 
    { 
     if (portId != null) 
     { 
      try 
      { 
       portId.addPortOwnershipListener(this); 
       serialPort = (SerialPort) portId.open("MobileGateWay", 2000); 
      } 
      catch (PortInUseException e) 
      { 
       e.printStackTrace(); 
      } 

      try 
      { 
       inputStream = serialPort.getInputStream(); 
       outputStream = serialPort.getOutputStream(); 
      } 
      catch (IOException e) 
      { 
      } 

      try 
      { 

       serialPort.addEventListener(this); 
       serialPort.notifyOnDataAvailable(true); 
      } 
      catch (TooManyListenersException e) 
      { 
      } 

      send("ATZ\r\n"); 

     } 
     else 
     { 
      throw new NullPointerException("COM Port not found!!"); 
     } 
    } 

    @Override 
    public void serialEvent(SerialPortEvent serialPortEvent) 
    { 
     switch (serialPortEvent.getEventType()) 
     { 
      case SerialPortEvent.BI: 
      case SerialPortEvent.OE: 
      case SerialPortEvent.FE: 
      case SerialPortEvent.PE: 
      case SerialPortEvent.CD: 
      case SerialPortEvent.CTS: 
      case SerialPortEvent.DSR: 
      case SerialPortEvent.RI: 
      case SerialPortEvent.OUTPUT_BUFFER_EMPTY: 
      case SerialPortEvent.DATA_AVAILABLE: 

       byte[] readBuffer = new byte[2048]; 
       try 
       { 
        while (inputStream.available() > 0) 
        { 
         int numBytes = inputStream.read(readBuffer); 
        } 
//print response message 
        System.out.print(new String(readBuffer)); 
       } 
       catch (IOException e) 
       { 
        e.printStackTrace(); 
       } 
       break; 
     } 
    } 

    @Override 
    public void ownershipChange(int type) 
    { 
     switch (type) 
     { 
      case CommPortOwnershipListener.PORT_UNOWNED: 
       System.out.println(portId.getName() + ": PORT_UNOWNED"); 
       break; 
      case CommPortOwnershipListener.PORT_OWNED: 
       System.out.println(portId.getName() + ": PORT_OWNED"); 
       break; 
      case CommPortOwnershipListener.PORT_OWNERSHIP_REQUESTED: 
       System.out.println(portId.getName() + ": PORT_INUSED"); 
       break; 
     } 

    } 

} 

Das ist mein Hauptklasse:

package sendMessage; 

import java.awt.Frame; 
import java.awt.Dimension; 
import javax.swing.JTextField; 
import java.awt.BorderLayout; 
import java.awt.Rectangle; 
import javax.swing.JLabel; 
import javax.swing.JButton; 
import javax.swing.JPanel; 
import java.awt.GridBagLayout; 
import java.awt.Color; 

public class GUIToSendMessage extends Frame { 

    private static final long serialVersionUID = 1L; 
    private JTextField jTextField_mobiNo = null; 
    private JLabel jLabel_mobno = null; 
    private JButton jButton_send = null; 
    private JPanel jPanel_contents = null; 
    private JLabel jLabel_msg = null; 
    private JTextField jTextField_message = null; 
    /** 
    * This is the default constructor 
    */ 
    public GUIToSendMessage() { 
     super(); 
     initialize(); 
    } 

    public static void main(String args[]) 
    { 
     java.awt.EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new GUIToSendMessage().setVisible(true); 
      } 
     }); 
    } 

    /** 
    * This method initializes this 
    * 
    * @return void 
    */ 
    private void initialize() { 
     jLabel_mobno = new JLabel(); 
     jLabel_mobno.setText("Mobile No"); 
     jLabel_mobno.setBounds(new Rectangle(28, 74, 74, 16)); 
     this.setLayout(null); 
     this.setSize(341, 348); 
     this.setTitle("Send Message"); 

     this.add(getJPanel_contents(), null); 
    } 

    /** 
    * This method initializes jTextField_mobiNo 
    * 
    * @return javax.swing.JTextField 
    */ 
    private JTextField getJTextField_mobiNo() { 
     if (jTextField_mobiNo == null) { 
      jTextField_mobiNo = new JTextField(); 
      jTextField_mobiNo.setBounds(new Rectangle(135, 75, 143, 20)); 
     } 
     return jTextField_mobiNo; 
    } 

    /** 
    * This method initializes jButton_send 
    * 
    * @return javax.swing.JButton 
    */ 
    private JButton getJButton_send() { 
     if (jButton_send == null) { 
      jButton_send = new JButton(); 
      jButton_send.setText("Send"); 
      jButton_send.setBackground(Color.white); 
      jButton_send.setBounds(new Rectangle(124, 227, 78, 32)); 
      jButton_send.addActionListener(new java.awt.event.ActionListener() { 
       public void actionPerformed(java.awt.event.ActionEvent e) { 
        String mobiNo = jTextField_mobiNo.getText(); 
        String message =jTextField_message.getText(); 

        Connect gsm = new Connect("COM12"); 
        if (gsm.init()) 
        { 
         try 
         { 
          gsm.connect(); 
          gsm.checkStatus(); 
          Thread.sleep(1000); 
          gsm.sendMessage(mobiNo, message); 

          Thread.sleep(1000); 
          //gsm.hangup(); 
         } 
         catch (Exception ex) 
         { 
         } 
        } 
        else 
        { 
         System.out.println("Can't init this card"); 
        } // TODO Auto-generated Event stub actionPerformed() 
       } 
      }); 
      jButton_send.addActionListener(new java.awt.event.ActionListener() { 
       public void actionPerformed(java.awt.event.ActionEvent e) { 
        System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed() 
       } 
      }); 
     } 
     return jButton_send; 
    } 

    /** 
    * This method initializes jPanel_contents 
    * 
    * @return javax.swing.JPanel 
    */ 
    private JPanel getJPanel_contents() { 
     if (jPanel_contents == null) { 
      jLabel_msg = new JLabel(); 
      jLabel_msg.setBounds(new Rectangle(37, 129, 58, 16)); 
      jLabel_msg.setText("Message"); 
      jPanel_contents = new JPanel(); 
      jPanel_contents.setLayout(null); 
      jPanel_contents.setBounds(new Rectangle(9, 31, 330, 315)); 
      jPanel_contents.setBackground(new Color(204, 204, 255)); 
      jPanel_contents.add(getJButton_send(), null); 
      jPanel_contents.add(getJTextField_mobiNo(), null); 
      jPanel_contents.add(jLabel_mobno, null); 
      jPanel_contents.add(jLabel_msg, null); 
      jPanel_contents.add(getJTextField_message(), null); 
     } 
     return jPanel_contents; 
    } 

    /** 
    * This method initializes jTextField_message 
    * 
    * @return javax.swing.JTextField 
    */ 
    private JTextField getJTextField_message() { 
     if (jTextField_message == null) { 
      jTextField_message = new JTextField(); 
      jTextField_message.setBounds(new Rectangle(131, 125, 151, 20)); 
     } 
     return jTextField_message; 
    } 

} 

ich diese Frage vor gefragt, aber keine Antworten zu bekommen scheinen, jeder Vorschlag ist?

Danke!

+0

Sind Sie sicher, dass Ihr Portnamen „COM12“ ist das richtige? Was passiert, wenn Sie 'System.out.println (portId);' durch 'System.out.println (portId.getName());' ersetzen und das Programm erneut ausführen, um alle seriellen Portnamen auf Ihrem System zu überprüfen –

+0

@lulian Dogariu der gleiche Fehler – Mike

+0

Welche Portnamen sehen Sie ausgedruckt? –

Antwort

0

Schließlich löste ich mein Problem, Ich habe gerade 32-Bit-JDK anstelle von 64-Bit-JDK und Fehler verschwunden, vielen Dank für Kommentare