Im Prinzip wäre der Aufbau etwa so:
[code=Java]
public boolean startPayment(){
new SwingWorker<Void,String>() {
@Override
public void doInBackground() {
while (true) {
try {
dataString += String.format("%02x", dIn.readByte() & 0xFF);
if(dataString.contains("04ff")){
laenge = dIn.readByte();
status = String.format("%02x", dIn.readByte() & 0xFF);
System.out.println("STATUS : " + status);
publish(mainProg.getCaptions().getString(status));
dOut.write(commandSuccess);
dataString = "";
}
// ...
}
}
@Override
public void process(List<String> values) {
info.setText(values.get(0));
}
}.execute();
}
[/code]
Ob das reicht, kann ich Dir allerdings nicht sagen, weil ich nicht weiß, wo Du die ganzen Variablen noch überall verwendest, die in doInBackground genutzt werden. Da musst Du ggf. den Zugriff synchronisieren.
Außerdem wirst Du wahrscheinlich verhindern wollen, dass der Spaß mehrfach ausgeführt wird.