java - 程序运行时出现ArrayIndexOutOfBoundsException

标签 java string com

我为 gps NMEA0183 协议(protocol)数据解码编写代码,我成功完成了它,但是当程序在执行后处于运行状态时显示错误 arrayindexoutofbounce 我无法理解为什么会发生这种情况。我的代码在下面直接关注我的错误,我只是给出了我的整个错误仅提供更多详细信息的代码。谢谢。

/*
 * 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)

最佳答案

这行似乎是问题所在:-

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

因为此代码片段 s=aa.com().split("\\$",0); 似乎仅将 1 元素返回到字符串数组s

因此,s[1] 抛出 ArrayIndexOutOfBoundsException

关于java - 程序运行时出现ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15715293/

相关文章:

java - HashSet 没有意识到两个对象是相同的

java - 过滤logstash输入

c++ - 如何获取调用COM服务器方法的用户的SID?

java - 将大字符串写入文件的问题

c++ - 直接显示过滤器中的调用约定

c++ - 如何将 COM 方法作为函数参数传递?和 Microsoft 编译器错误 C3867

java - 如何将 S3object 转换为 Observable

Java - 如何从新进程线程调用 Java main()

java - 复选框标签到字符串

java - 简单的java,字符串长度