Meu programa roda mais nao deveria (XML e thread)

0 respostas
delbianco

Galera estou em um dilema: [size=18]meu programa roda[/size] !!!! (mais nao deveria!!!!!)

primeiro vou explicar:

tenho um XML (abaixo) sendo enviado via http ....

<?xml version="1.0" encoding="UTF-8"?>
<MTConnectStreams xmlns:m="urn:mtconnect.org:MTConnectStreams:1.1" xmlns="urn:mtconnect.org:MTConnectStreams:1.1" xsi:schemaLocation="urn:mtconnect.org:MTConnectStreams:1.1 http://www.mtconnect.org/schemas/MTConnectStreams_1.1.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Header creationTime="2011-05-19T19:21:02Z" sender="KYATERA-SERVER" instanceId="[telefone removido]" bufferSize="131072" version="1.1" nextSequence="121" firstSequence="1" lastSequence="120"/>
  <Streams>
    <DeviceStream name="romi" uuid="uuid_romi">
      <ComponentStream component="Rotary" name="C" componentId="c1">
        <Samples>
          <Load dataItemId="cl" timestamp="2011-05-19T18:20:36.0982Z" name="Sload" sequence="51">UNAVAILABLE</Load>
          <SpindleSpeed dataItemId="covr" timestamp="2011-05-19T18:20:36.0982Z" name="S1ovr" sequence="54" subType="OVERRIDE">UNAVAILABLE</SpindleSpeed>

        </Samples>
      </ComponentStream>
      <ComponentStream component="Rotary" name="C2" componentId="c2">
        <Samples>
          <Angle dataItemId="c2a" timestamp="2011-05-19T18:20:36.0982Z" name="Cact" sequence="49" subType="ACTUAL">UNAVAILABLE</Angle>
        </Samples>
        <Events>
          <RotaryMode dataItemId="c2m" timestamp="2011-05-19T18:20:36.0982Z" name="Cmode" sequence="50">INDEX</RotaryMode>

        </Events>
      </ComponentStream>
      <ComponentStream component="Controller" name="Controller" componentId="cont">
        <Events>
          <Time dataItemId="cuttime" timestamp="2011-05-19T18:20:36.0982Z" name="cuttime" sequence="56">UNAVAILABLE</Time>
          <Time dataItemId="cycbegin" timestamp="2011-05-19T18:20:36.0982Z" name="cycbegin" sequence="57">UNAVAILABLE</Time>
          <Time dataItemId="cycend" timestamp="2011-05-19T18:20:36.0982Z" name="cycend" sequence="58">UNAVAILABLE</Time>

          <Time dataItemId="cycltime" timestamp="2011-05-19T18:20:36.0982Z" name="cycltime" sequence="59">UNAVAILABLE</Time>
          <Time dataItemId="cyctime" timestamp="2011-05-19T18:20:36.0982Z" name="cyctime" sequence="60">UNAVAILABLE</Time>
          <Diam dataItemId="diambegin" timestamp="2011-05-19T18:20:36.0982Z" name="diambegin" sequence="61">UNAVAILABLE</Diam>
          <Diam dataItemId="diamend" timestamp="2011-05-19T18:20:36.0982Z" name="diamend" sequence="62">UNAVAILABLE</Diam>
          <PartCount dataItemId="partall" timestamp="2011-05-19T18:20:36.0982Z" name="partall" sequence="69">UNAVAILABLE</PartCount>
          <PartCount dataItemId="partbad" timestamp="2011-05-19T18:20:36.0982Z" name="partbad" sequence="70">UNAVAILABLE</PartCount>
.
.
.
.
.

beleza eu leio os dados etc ..... e exibo na minha interface em javafx .... ae que vem o [size=18]pobrema[/size]

esse xml e' alterado a todo momento os dados dele sao RealTime com a maquina que os envia .....
e o meu programa exibe so' o dado que ele leu no momento que rodou da primeira vez ...

depois de quebrar muito a cabeca .... fui atraz de um jeito de fazer uma thread para que ficasse lendo a todo momento

ai como nao sou um bom programador java fiz uma coisa que acho ser uma gambiarra beeeeem malfeita ...

segue o co'digo:
package mtconnectvers13_1;

import com.sun.javafx.runtime.Entry;

import javafx.async.RunnableFuture;

public class JavaSleepTask implements RunnableFuture {
    FXListener listener;
    private ReaderXML Reader;

    public JavaSleepTask(FXListener listener) {
        this.listener = listener;

    }
    String[] ArrayString = new String[38]; // aqui eu crio um vetor para armazenar os valores String
    double[] ArrayDouble= new double[38]; // aqui os valores double

    @Override
    public void run() throws Exception {

//zerando os vetores
    for (int i = 0; i < ArrayString.length; i++){
			ArrayString[i] = "Zero";}
    for (int i = 0; i < ArrayDouble.length; i++){
			ArrayDouble[i] = 0.0;}


    float k = 0;
   

 try{  //looop infinito da thread 
        while (true) {
           
// leio o valor que eu quero do XML e armazeno em uma posicao do vetor 
// em javafx eu chamo pelo numero .....
       ArrayString[0] = ReaderXML.ReaderXML("Cmode");
       ArrayString[1] = ReaderXML.ReaderXML("block");
       ArrayString[2] = ReaderXML.ReaderXML("mode");
       ArrayString[3] = ReaderXML.ReaderXML("estop");
 .
.
.
.
            ArrayDouble[32] = Double.parseDouble(ReaderXML.ReaderXML("Zload"));
            ArrayDouble[33] = Double.parseDouble(ReaderXML.ReaderXML("diambegin"));
            ArrayDouble[34] = Double.parseDouble(ReaderXML.ReaderXML("diamend"));
            ArrayDouble[35] = Double.parseDouble(ReaderXML.ReaderXML("remmat"));
            ArrayDouble[36] = Double.parseDouble(ReaderXML.ReaderXML("cycltime"));
            ArrayDouble[37] = Double.parseDouble(ReaderXML.ReaderXML("load"));
          
           //enviando para a funcao que envia para o javaFX
            postMessage(ArrayString, ArrayDouble);
           

Thread.sleep(100);

        }}catch(Exception e){ System.err.println("ERRO NA THREAD,");}
    }


// funcao que envia os valores para meu programa em javafx

    public void postMessage(final String[] Armazena, final double[] ArmazenaDouble) {
        Entry.deferAction(new Runnable() {
            @Override
            public void run() {
                        listener.callback(Armazena);
                        listener.callbackDouble(ArmazenaDouble);
            }
        });
    }
}

beleza isso roda .... mais fica lento pra caramba .... tenho certeza que tem um metodo mais simples pra fazer isso
tentei em javaFX so' ler e on replace oldvalue ler denovo mais nao rolou pois ele nao acha valor novo pois nao leu o xml de novo

to achando que a minha incapacidade e' com XML .... bom pelo menos compartilhei com voces meu problema

valeu !!!!

Criado 19 de maio de 2011
Respostas 0
Participantes 1