Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ThreadpoolExecutor数据混淆_Android_Threadpoolexecutor_Flir - Fatal编程技术网

Android ThreadpoolExecutor数据混淆

Android ThreadpoolExecutor数据混淆,android,threadpoolexecutor,flir,Android,Threadpoolexecutor,Flir,我正在使用android的线程池执行器框架(初始化如下) CustomRunnable3的定义如下: class CustomRunnable3 implements Runnable { RenderedImage renderedImageLocal; String basePath, timeNowCopy; int hashCode; CustomRunnable3(RenderedImage renderedImage, String timeNow)

我正在使用android的线程池执行器框架(初始化如下)

CustomRunnable3的定义如下:

class CustomRunnable3 implements Runnable {
    RenderedImage renderedImageLocal;
    String basePath, timeNowCopy;
    int hashCode;

    CustomRunnable3(RenderedImage renderedImage, String timeNow) {
        renderedImageLocal = renderedImage;
        this.basePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
        this.timeNowCopy = timeNow;
        hashCode = renderedImageLocal.hashCode();
    }

    @Override
    public void run() {
        if (renderedImageLocal.imageType() == RenderedImage.ImageType.ThermalRadiometricKelvinImage) {
            int[] thermalData = renderedImageLocal.thermalPixelValues();
            String dataPath = basePath + "/" + this.timeNowCopy + ".csv";
            try {
                PrintWriter printWriter = new PrintWriter(dataPath);
                int dataLen = thermalData.length;
                for (int i = 0; i < dataLen; i++) {
                    printWriter.println(thermalData[i]);
                }
                printWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            String imgPath = basePath + "/" + this.timeNowCopy + ".jpg";
            try {
                if (hashCode != renderedImageLocal.hashCode()) {
                    Log.e("Checking", "Hash code changed..");
                }
                renderedImageLocal.getFrame().save(new File(imgPath), frameProcessor);
                if (hashCode != renderedImageLocal.hashCode()) {
                    Log.e("Checking", "Hash code changed after writing..");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}
类CustomRunnable3实现Runnable{
RenderImageRenderImageLocal;
字符串basePath,timeNowCopy;
int哈希码;
CustomRunnable3(RenderImage RenderImage,字符串timeNow){
RenderImageLocal=RenderImageLocal;
this.basePath=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
this.timeNowCopy=timeNow;
hashCode=renderImageLocal.hashCode();
}
@凌驾
公开募捐{
if(renderImageLocal.imageType()==renderImage.imageType.ThermalRadiodrickElvinImages){
int[]thermalData=RenderImageLocal.thermalPixelValues();
字符串dataPath=basePath+“/”+this.timeNowCopy+“.csv”;
试一试{
PrintWriter PrintWriter=新的PrintWriter(数据路径);
int dataLen=thermalData.length;
对于(int i=0;i
使用场景:onFrameReceived每秒被调用多次(如4-5次)。在每次调用onFrameReceived时,我都从RenderImageObject保存两个文件(1个csv文件,1个jpg文件)。这两个文件必须相互关联,因为它们都是从一个父级创建的,并且具有相同的名称(扩展名除外)

问题:但这并没有发生,不知何故,我最终得到的是来自1个RenderImage的jpg文件内容和来自另一个RenderImage对象的csv内容。
出现此问题的可能原因是什么,请分享您的观点。

我认为问题可能与您总是传递对RenderImage的引用有关。围绕onFrameProcessed回调的更多上下文将是helpful@nsndvd:但当我创建CustomRunnable3实例时,构造函数正在复制对RenderImage的引用,因此在下一次调用onFrameProcessed时,RenderImage不应该指向新对象,并且CustomRunnable3实例应该仍然具有以前的对象引用吗?关于onFrameProcessed:它实际上是一个回调,在处理原始帧时调用它,并向它传递一个RenderImage对象(只是一个处理过的帧形式),据我所知,每次都是一个新的对象引用。是的,你写的是正确的。我不太熟悉您正在使用的API,我想知道是否有某种缓冲区可以跨实例重用
public void onFrameProcessed(RenderedImage renderedImage) {
String timeNow = new SimpleDateFormat("d-M-Y_HH_mm_ss_SSS").format(new Date()).toString();
CustomRunnable3 customRunnable3 = new CustomRunnable3(renderedImage, timeNow);
executorService.execute(customRunnable3);
}
class CustomRunnable3 implements Runnable {
    RenderedImage renderedImageLocal;
    String basePath, timeNowCopy;
    int hashCode;

    CustomRunnable3(RenderedImage renderedImage, String timeNow) {
        renderedImageLocal = renderedImage;
        this.basePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
        this.timeNowCopy = timeNow;
        hashCode = renderedImageLocal.hashCode();
    }

    @Override
    public void run() {
        if (renderedImageLocal.imageType() == RenderedImage.ImageType.ThermalRadiometricKelvinImage) {
            int[] thermalData = renderedImageLocal.thermalPixelValues();
            String dataPath = basePath + "/" + this.timeNowCopy + ".csv";
            try {
                PrintWriter printWriter = new PrintWriter(dataPath);
                int dataLen = thermalData.length;
                for (int i = 0; i < dataLen; i++) {
                    printWriter.println(thermalData[i]);
                }
                printWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            String imgPath = basePath + "/" + this.timeNowCopy + ".jpg";
            try {
                if (hashCode != renderedImageLocal.hashCode()) {
                    Log.e("Checking", "Hash code changed..");
                }
                renderedImageLocal.getFrame().save(new File(imgPath), frameProcessor);
                if (hashCode != renderedImageLocal.hashCode()) {
                    Log.e("Checking", "Hash code changed after writing..");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}