Tenho um método que recebe dados e adiciona em um ArrayList que funciona.
Tenho outro método que checa quando a letra é um “p” ele imprime as 3 próximas linhas do ArrayList que também funciona.
Porém agora eu preciso automatizar isso, preciso que quando a letra seja “p” ele imprima e apague restartando dessa forma o processo de preenchimento da ArrayList iniciando o loop novamente.
O máximo que consegui foi imprimir e ao apagar perdeu toda a ordem, bagunçando tudo. Seguem os métodos:
public void serialEvent(SerialPortEvent ev){
switch (ev.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:
break;
case SerialPortEvent.DATA_AVAILABLE:
byte[] bufferLeitura = new byte[16];
try {
while ( entrada.available() > 0 ) {
nodeBytes = entrada.read(bufferLeitura);
}
String dadosLidos = new String(bufferLeitura);
if (bufferLeitura.length == 0) {
JOptionPane.showMessageDialog(null,
"Nada foi lido. Verifique a balança!",
"Aviso!",
JOptionPane.WARNING_MESSAGE);
//System.out.println("Nada lido!");
} else if (bufferLeitura.length == 1 ){
JOptionPane.showMessageDialog(null,
"Apenas 1 byte foi lido. Verifique a balança!",
"Aviso!",
JOptionPane.WARNING_MESSAGE);
//System.out.println("Apenas um byte foi lido!");
} else {
dadosTotal.add(dadosLidos);
}
}catch(Exception e) {
JOptionPane.showMessageDialog(null,
"Erro durante leitura! STATUS: " + e,
"Erro!",
JOptionPane.ERROR_MESSAGE);
//System.out.println("Erro durante a leitura: " + e );
}
//System.out.println("n.o de bytes lidos : " + nodeBytes );
break;
}
}
Método de impressão:
public void imprimeArray(){
try{
for (int i = 0; i < dadosTotal.size(); i++){
str = (String)it.next();
index = str.indexOf('p');
if (index > -1){
String pesoTotal;
pesoTotal = dadosTotal.get(i + 1).toString().substring(0, 2) +
"," + dadosTotal.get(i + 2).toString().substring(0, 2) +
dadosTotal.get(i + 3).toString().substring(0, 2);
Main.jTextFieldPeso.setText(pesoTotal);
i = dadosTotal.size();
Thread.sleep(100);
}
}
}catch(ConcurrentModificationException cme){
JOptionPane.showMessageDialog(null,
"Erro de concorrência. Tente novamente! STATUS: " + cme,
"Erro!",
JOptionPane.ERROR_MESSAGE);
}catch(InterruptedException ie){
ie.printStackTrace();
}
}
Alguém aí tem alguma luz.