我为gps编写代码NMEA0183协议数据解码我做得成功但是当程序处于运行状态后,一些执行显示错误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)
答案 0 :(得分:1)
这条线似乎是问题所在: -
a1=s[1].split("\\*",0);
因为此代码段s=aa.com().split("\\$",0);
似乎只返回1
元素到字符串数组s
。
因此,s[1]
正在抛出ArrayIndexOutOfBoundsException
。