Simulator Issue
I have a successful 1D barcode decoder that I've used in a previous CN1 application that works by scanning an image created by capturePhoto(). I'm revisiting it on further implementation for another application. But on the simulator I received a EDT violation on a thread spawned by Display.getInstance().startThread(). The problem appears during the ImageIO.save(); I didn't think that a task running in a "startThread" could incur an EDT violation.
I've only tried this today on HTC Thunderbolt and LG Intuition, but worked fine on both and came back with a result in less than a second.
@Override
protected boolean perform() {
Capture.capturePhoto(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
final String snapshot = (String) evt.getSource();
if (snapshot != null) {
Display.getInstance().startThread(new Runnable() {
public void run() {
try {
ByteArrayOutputStream output = new ByteArrayOutputStream();
ImageIO.getImageIO().save(snapshot, output, ImageIO.FORMAT_JPEG, xDimension, yDimension, quality);
Image image = EncodedImage.create(output.toByteArray());
if (image != null) {
Image scannedImage = ImageDecoder.FormatImage(image);
int[] picture = scannedImage.getRGB();
int[] decoders = assignDecoders();
ImageDecoder decoder = new ImageDecoder(decoders);
final Result result = decoder.doDecode(picture, scannedImage.getWidth(), scannedImage.getHeight());
setResult(result);
}
FileSystemStorage.getInstance().delete(snapshot);
} catch (IOException ex) {
logException("UITaskScanner", ex);
}
}
}, "decoder").start();
}
}
});
return true;
}
Rendering frame took too long 265 milliseconds
EDT violation detected!
com.codename1.impl.javase.JavaSEPort$EDTViolation: EDT Violation Stack!
at com.codename1.impl.javase.JavaSEPort.checkEDT(JavaSEPort.java:384)
EDT violation detected!
EDT violation detected!
EDT violation detected!
EDT violation detected!
EDT violation detected!
at com.codename1.impl.javase.JavaSEPort.scale(JavaSEPort.java:3234)
at com.codename1.ui.Image.scale(Image.java:961)
at com.codename1.ui.Image.scaledImpl(Image.java:931)
at com.codename1.ui.Image.scaled(Image.java:896)
at com.codename1.impl.javase.JavaSEPort$53.save(JavaSEPort.java:6170)
at com.codename1.ui.util.ImageIO.save(ImageIO.java:95)
at com.crumptech.mobile.crump.ui.tasks.UITaskScanner$2$1.run(UITaskScanner.java:120)