2013-03-30 126 views
0

我写用于GPS NMEA0183协议数据解码代码时,我成功地做到发生,但是当程序处于运行状态之后arrayindexoutofbounce我不能理解一些执行显示错误为什么它happen.my代码低于直接聚焦在我的错误我只是给我的整个代码更多的细节only.thanking你。ArrayIndexOutOfBoundsException异常程序运行

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/* 
* test2.java 
* 
* Created on Mar 17, 2013, 8:11:09 AM 
*/ 
package vpspro; 
import java.awt.Color; 
import java.awt.Component; 
import java.io.IOException; 
import java.util.Enumeration; 
import java.util.TooManyListenersException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.comm.UnsupportedCommOperationException; 
import vpspro.communication; 
import java.util.Timer; 
import java.util.TimerTask; 
import javax.comm.CommPortIdentifier; 
import javax.swing.JOptionPane; 
import javax.swing.JSpinner; 

/** 
* 
* @author DJ ROCKS 
*/ 
public class test2 extends javax.swing.JFrame { 


    CommPortIdentifier portId = null; 
    public boolean bul=false; 
    public Object v; 
    public String all=null; 


     Timer timer; 
    private Component test2; 
    public test2() { 

     initComponents(); 



    } 


private void data() throws UnsupportedCommOperationException, IOException, TooManyListenersException,ArrayIndexOutOfBoundsException 
    { 

     String[] a2; 
String a1[]; 
String c; 
String[] t; 
    String s[]; 
     communication aa=new communication(); 


     while(bul==true) 
     { 
      int tp=0; 
     if(aa.com().isEmpty()==false) 
     { 

     s=aa.com().split("\\$",0); 

     char d=aa.com().charAt(0); 
     switch(d) 
     { 
      case '$': 

      a1=s[1].split("\\*",0); 
      int l=a1[0].length(); 
char[] a=a1[0].toCharArray(); 
int b=0; 

for(int p=0;p<l;p++) 
{ 

b=b^a[p]; 

} 

c=Integer.toHexString(b); 
if(a1[1].equalsIgnoreCase(c)) 
{ 
      System.err.println(a1); 
      t=a1[0].split(",",0); 
      if((a1[0].substring(2, 5).equalsIgnoreCase("GGA"))) 
      { 
      lon.setText(t[4].concat(" "+t[5])); 
       System.out.println(t[5]); 

      lat.setText(t[2].concat(" "+t[3])); 
      utc.setText(t[1]); 


      } 
      else 
      { 
       System.err.println("System fail"); 
      } 

}     

     } 

      }  

     } 

        } 


    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     jDialog1 = new javax.swing.JDialog(); 
     jDialog2 = new javax.swing.JDialog(); 
     jDialog3 = new javax.swing.JDialog(); 
     jPanel2 = new javax.swing.JPanel(); 
     jPanel1 = new javax.swing.JPanel(); 
     sp = new javax.swing.JSpinner(); 
     bd = new javax.swing.JComboBox(); 
     ok = new javax.swing.JButton(); 
     dis = new javax.swing.JButton(); 
     lon = new javax.swing.JTextField(); 
     lat = new javax.swing.JTextField(); 
     utc = new javax.swing.JTextField(); 
     jLabel4 = new javax.swing.JLabel(); 
     jLabel3 = new javax.swing.JLabel(); 
     jLabel2 = new javax.swing.JLabel(); 
     jLabel1 = new javax.swing.JLabel(); 
     jLabel5 = new javax.swing.JLabel(); 
     jLabel6 = new javax.swing.JLabel(); 

     javax.swing.GroupLayout jDialog1Layout = new javax.swing.GroupLayout(jDialog1.getContentPane()); 
     jDialog1.getContentPane().setLayout(jDialog1Layout); 
     jDialog1Layout.setHorizontalGroup(
      jDialog1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 400, Short.MAX_VALUE) 
     ); 
     jDialog1Layout.setVerticalGroup(
      jDialog1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 300, Short.MAX_VALUE) 
     ); 

     jDialog2.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 

     javax.swing.GroupLayout jDialog2Layout = new javax.swing.GroupLayout(jDialog2.getContentPane()); 
     jDialog2.getContentPane().setLayout(jDialog2Layout); 
     jDialog2Layout.setHorizontalGroup(
      jDialog2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 400, Short.MAX_VALUE) 
     ); 
     jDialog2Layout.setVerticalGroup(
      jDialog2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 300, Short.MAX_VALUE) 
     ); 

     javax.swing.GroupLayout jDialog3Layout = new javax.swing.GroupLayout(jDialog3.getContentPane()); 
     jDialog3.getContentPane().setLayout(jDialog3Layout); 
     jDialog3Layout.setHorizontalGroup(
      jDialog3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 400, Short.MAX_VALUE) 
     ); 
     jDialog3Layout.setVerticalGroup(
      jDialog3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 300, Short.MAX_VALUE) 
     ); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     setBackground(new java.awt.Color(255, 102, 0)); 
     setFont(new java.awt.Font("Alaska", 1, 10)); 
     setForeground(new java.awt.Color(51, 51, 255)); 

     javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); 
     jPanel2.setLayout(jPanel2Layout); 
     jPanel2Layout.setHorizontalGroup(
      jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 487, Short.MAX_VALUE) 
     ); 
     jPanel2Layout.setVerticalGroup(
      jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 608, Short.MAX_VALUE) 
     ); 

     jPanel1.setBackground(new java.awt.Color(153, 204, 255)); 
     jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("")); 
     jPanel1.setMaximumSize(new java.awt.Dimension(3276, 3276)); 

     sp.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
     sp.addChangeListener(new javax.swing.event.ChangeListener() { 
      public void stateChanged(javax.swing.event.ChangeEvent evt) { 
       spStateChanged(evt); 
      } 
     }); 

     bd.setBackground(new java.awt.Color(51, 153, 255)); 
     bd.setEditable(true); 
     bd.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N 
     bd.setForeground(new java.awt.Color(255, 0, 204)); 
     bd.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "4800", "9600" })); 
     bd.addItemListener(new java.awt.event.ItemListener() { 
      public void itemStateChanged(java.awt.event.ItemEvent evt) { 
       bdItemStateChanged(evt); 
      } 
     }); 
     bd.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       bdActionPerformed(evt); 
      } 
     }); 

     ok.setBackground(new java.awt.Color(0, 153, 102)); 
     ok.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
     ok.setForeground(new java.awt.Color(105, 105, 105)); 
     ok.setText("connect"); 
     ok.addChangeListener(new javax.swing.event.ChangeListener() { 
      public void stateChanged(javax.swing.event.ChangeEvent evt) { 
       okStateChanged(evt); 
      } 
     }); 
     ok.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       okActionPerformed(evt); 
      } 
     }); 

     dis.setBackground(new java.awt.Color(204, 204, 255)); 
     dis.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
     dis.setText("disconnect"); 
     dis.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       disActionPerformed(evt); 
      } 
     }); 

     lon.setBackground(new java.awt.Color(153, 204, 255)); 
     lon.setEditable(false); 
     lon.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N 
     lon.setForeground(new java.awt.Color(255, 0, 102)); 
     lon.setText(" "); 
     lon.setBorder(new javax.swing.border.MatteBorder(null)); 
     lon.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       lonActionPerformed(evt); 
      } 
     }); 

     lat.setBackground(new java.awt.Color(153, 204, 255)); 
     lat.setEditable(false); 
     lat.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N 
     lat.setForeground(new java.awt.Color(255, 51, 102)); 
     lat.setText(" "); 
     lat.setBorder(new javax.swing.border.MatteBorder(null)); 
     lat.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       latActionPerformed(evt); 
      } 
     }); 

     utc.setBackground(new java.awt.Color(153, 204, 255)); 
     utc.setEditable(false); 
     utc.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N 
     utc.setForeground(new java.awt.Color(255, 0, 102)); 
     utc.setText(" "); 
     utc.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); 
     utc.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       utcActionPerformed(evt); 
      } 
     }); 

     jLabel4.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N 
     jLabel4.setText("UTC"); 

     jLabel3.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N 
     jLabel3.setText("latitude"); 

     jLabel2.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N 
     jLabel2.setText("longitude"); 

     jLabel1.setFont(new java.awt.Font("Sylfaen", 2, 18)); // NOI18N 
     jLabel1.setForeground(new java.awt.Color(255, 51, 51)); 
     jLabel1.setText("COM"); 

     jLabel5.setFont(new java.awt.Font("Tahoma", 2, 18)); // NOI18N 
     jLabel5.setForeground(new java.awt.Color(255, 51, 51)); 
     jLabel5.setText("baudrate"); 

     jLabel6.setIcon(new javax.swing.ImageIcon("C:\\Users\\DJ ROCKS\\Desktop\\ship(1).png")); // NOI18N 
     jLabel6.setText(" "); 

     javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
     jPanel1.setLayout(jPanel1Layout); 
     jPanel1Layout.setHorizontalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jPanel1Layout.createSequentialGroup() 
       .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(jPanel1Layout.createSequentialGroup() 
         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
          .addGroup(jPanel1Layout.createSequentialGroup() 
           .addContainerGap(113, Short.MAX_VALUE) 
           .addComponent(jLabel6) 
           .addGap(130, 130, 130)) 
          .addGroup(jPanel1Layout.createSequentialGroup() 
           .addGap(84, 84, 84) 
           .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE) 
           .addGap(18, 18, 18) 
           .addComponent(sp, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE))) 
         .addGap(8, 8, 8) 
         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
          .addComponent(jLabel3) 
          .addComponent(jLabel2) 
          .addComponent(jLabel4)) 
         .addGap(25, 25, 25) 
         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
          .addComponent(utc, javax.swing.GroupLayout.DEFAULT_SIZE, 366, Short.MAX_VALUE) 
          .addComponent(lat, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 366, Short.MAX_VALUE) 
          .addComponent(lon, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 366, Short.MAX_VALUE))) 
        .addGroup(jPanel1Layout.createSequentialGroup() 
         .addGap(66, 66, 66) 
         .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
         .addComponent(bd, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE)) 
        .addGroup(jPanel1Layout.createSequentialGroup() 
         .addGap(78, 78, 78) 
         .addComponent(ok) 
         .addGap(72, 72, 72) 
         .addComponent(dis))) 
       .addContainerGap()) 
     ); 
     jPanel1Layout.setVerticalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jPanel1Layout.createSequentialGroup() 
       .addContainerGap(33, Short.MAX_VALUE) 
       .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() 
         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
          .addComponent(lon, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
          .addComponent(jLabel2)) 
         .addGap(39, 39, 39) 
         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
          .addComponent(jLabel3) 
          .addComponent(lat, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
         .addGap(38, 38, 38) 
         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
          .addComponent(jLabel4) 
          .addComponent(utc, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)) 
         .addGap(38, 38, 38)) 
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() 
         .addComponent(jLabel6) 
         .addGap(64, 64, 64) 
         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
          .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE) 
          .addComponent(sp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) 
       .addGap(46, 46, 46) 
       .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(bd, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(jLabel5)) 
       .addGap(50, 50, 50) 
       .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(dis) 
        .addComponent(ok)) 
       .addGap(153, 153, 153)) 
     ); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(44, 44, 44) 
       .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
     ); 

     pack(); 
    }// </editor-fold>       


    private void okActionPerformed(java.awt.event.ActionEvent evt) {         

if(evt.getSource()==ok) 
{ 
    bul=true; 
    if(new communication().bul1==false) 
    { 
    JOptionPane.showMessageDialog(test2,"GPS CONNECTE"); 

    } 
    //System.out.print(bd.get); 
    timer = new Timer(); 
    timer.schedule(new RemindTask(), 1); 

} 

    }         

    private void okStateChanged(javax.swing.event.ChangeEvent evt) {         
     // TODO add your handling code here: 
    }        

    private void latActionPerformed(java.awt.event.ActionEvent evt) {          
     // TODO add your handling code here: 
    }         

    private void disActionPerformed(java.awt.event.ActionEvent evt) {          
     // TODO add your handling code here: 
     // 
     if(evt.getSource()==dis) 
     { 
       bul=false; 
JOptionPane.showMessageDialog(test2,"GPS DISCONNECTE"); 


     } 
    }         

    private void bdActionPerformed(java.awt.event.ActionEvent evt) {         
     // TODO add your handling code here: 

    }         

    private void lonActionPerformed(java.awt.event.ActionEvent evt) {          
     // TODO add your handling code here: 
    }         

    private void spStateChanged(javax.swing.event.ChangeEvent evt) {         

     sp=(JSpinner) evt.getSource(); 
     v= sp.getValue(); 
    }        

    private void bdItemStateChanged(java.awt.event.ItemEvent evt) {          
     // TODO add your handling code here: 
     String all=(String)bd.getSelectedItem(); 
    }         

    private void utcActionPerformed(java.awt.event.ActionEvent evt) {          
     // TODO add your handling code here: 
    }         

class RemindTask extends TimerTask { 
    public void run() { 
      try { 

       data(); 

      } catch (UnsupportedCommOperationException ex) { 
       Logger.getLogger(test2.class.getName()).log(Level.SEVERE, null, ex); 
      } catch (IOException ex) { 
       Logger.getLogger(test2.class.getName()).log(Level.SEVERE, null, ex); 
      } catch (TooManyListenersException ex) { 
       Logger.getLogger(test2.class.getName()).log(Level.SEVERE, null, ex); 
      } 

    } 

    } 
    public static void main(String args[]) 
    { 
     java.awt.EventQueue.invokeLater(new Runnable() { 


      public void run() { 
       test2 i=new test2(); 

       System.out.println(i.getBackground()); 
       i.setTitle("VESSEL POSITION SYSTEM"); 

       i.setVisible(true); 
       i.setDefaultCloseOperation(EXIT_ON_CLOSE); 
       i.transferFocus(); 
      } 
     }); 
    } 
    // Variables declaration - do not modify      
    public javax.swing.JComboBox bd; 
    private javax.swing.JButton dis; 
    private javax.swing.JDialog jDialog1; 
    private javax.swing.JDialog jDialog2; 
    private javax.swing.JDialog jDialog3; 
    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.JPanel jPanel1; 
    private javax.swing.JPanel jPanel2; 
    public javax.swing.JTextField lat; 
    public javax.swing.JTextField lon; 
    private javax.swing.JButton ok; 
    public static javax.swing.JSpinner sp; 
    public javax.swing.JTextField utc; 
    // End of variables declaration     
} 

错误

Exception in thread "Timer-0" java.lang.ArrayIndexOutOfBoundsException: 1 
    at vpspro.test2.data(test2.java:75) 
    at vpspro.test2.access$900(test2.java:31) 
    at vpspro.test2$RemindTask.run(test2.java:463) 
    at java.util.TimerThread.mainLoop(Timer.java:555) 
    at java.util.TimerThread.run(Timer.java:505) 
+1

我甚至不知道从哪里开始。我不知道75号线在哪里。 – Makoto

+0

同时发布你的组件对于这个问题并不重要,你可以减少这么多的代码并且只发布有问题的部分。 – Maroun

+0

后while语句问题创造你也可以参考下面ANS,但它没有给我满意, – dharma

回答

1

此行似乎是问题: -

a1=s[1].split("\\*",0); 

它,因为这个代码片断s=aa.com().split("\\$",0);似乎只有1元素将返回字符串数组s

因此,s[1]ArrayIndexOutOfBoundsException

+0

但运行几分钟,比它显示这个错误 – dharma

+0

这是因为,'COM()'方法并不总是返回正确的'字符串'适合你需要的格式。 – SudoRahul

相关问题