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 !!!!