Java 无法重新录制oni文件

Java 无法重新录制oni文件,java,openni,Java,Openni,我尝试用Java录制oni文件。当我录制一个文件时效果很好。但当我想录制几个文件时,我遇到了问题 下面是一些测试代码: package test; import org.OpenNI.Context; import org.OpenNI.DepthGenerator; import org.OpenNI.GeneralException; import org.OpenNI.ImageGenerator; import org.OpenNI.OutArg; import org.OpenNI.

我尝试用Java录制oni文件。当我录制一个文件时效果很好。但当我想录制几个文件时,我遇到了问题

下面是一些测试代码:

package test;

import org.OpenNI.Context;
import org.OpenNI.DepthGenerator;
import org.OpenNI.GeneralException;
import org.OpenNI.ImageGenerator;
import org.OpenNI.OutArg;
import org.OpenNI.RecordMedium;
import org.OpenNI.Recorder;
import org.OpenNI.ScriptNode;

public class RecorderProblems {

    private static final String SAMPLE_XML_FILE = "KinectConfig.xml";
    private static final String TEST1_ONI_FILE = "Test1.oni";
    private static final String TEST2_ONI_FILE = "Test2.oni";

    public static void main(String[] args) {
        Context context = null;
        DepthGenerator depthGenerator = null;
        ImageGenerator imageGenerator = null;
        try {
            OutArg<ScriptNode> scriptNode = new OutArg<ScriptNode>();

            // Init Hardware
            System.out.println("Init Hardware");
            context = Context.createFromXmlFile(SAMPLE_XML_FILE, scriptNode);
            depthGenerator = DepthGenerator.create(context);
            imageGenerator = ImageGenerator.create(context);
            context.startGeneratingAll();

            // Record 1
            System.out.println("Start Record 1");
            Recorder recorder = Recorder.create(context, "oni");
            // Adding next line produces a corrupt file, but the program runs fine
//          context.createProductionTree(recorder.getInfo());
            recorder.setDestination(RecordMedium.FILE, TEST1_ONI_FILE);
            recorder.addNodeToRecording(depthGenerator);
            recorder.addNodeToRecording(imageGenerator);
            for (int i = 0; i < 100; i++) {
                context.waitOneUpdateAll(imageGenerator);
                recorder.Record();
            }
            recorder.removeNodeToRecording(depthGenerator);
            recorder.removeNodeToRecording(imageGenerator);
            recorder.dispose();

            // Record 2
            System.out.println("Start Record 2");
            recorder = Recorder.create(context, "oni");
            // Adding next line produces a corrupt file, but the program runs fine
//          context.createProductionTree(recorder.getInfo());
            recorder.setDestination(RecordMedium.FILE, TEST2_ONI_FILE);
            recorder.addNodeToRecording(depthGenerator);
            recorder.addNodeToRecording(imageGenerator);
            for (int i = 0; i < 100; i++) {
                context.waitOneUpdateAll(imageGenerator);
                recorder.Record();
            }
            recorder.removeNodeToRecording(depthGenerator);
            recorder.removeNodeToRecording(imageGenerator);
            recorder.dispose();
        } catch (GeneralException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            // End Hardware
            System.out.println("End Hardware");
            depthGenerator.dispose();
            depthGenerator = null;
            imageGenerator.dispose();
            imageGenerator = null;
            context.release();
            context.dispose();
        }
    }
}
封装测试;
导入org.OpenNI.Context;
导入org.OpenNI.DepthGenerator;
导入org.OpenNI.GeneralException;
导入org.OpenNI.ImageGenerator;
导入org.OpenNI.OutArg;
导入org.OpenNI.recordmedia;
导入org.OpenNI.Recorder;
导入org.OpenNI.ScriptNode;
公共类记录器问题{
私有静态最终字符串SAMPLE\u XML\u FILE=“KinectConfig.XML”;
私有静态最终字符串TEST1\u ONI\u FILE=“TEST1.ONI”;
私有静态最终字符串TEST2\u ONI\u FILE=“TEST2.ONI”;
公共静态void main(字符串[]args){
Context=null;
DepthGenerator DepthGenerator=null;
ImageGenerator ImageGenerator=null;
试一试{
OutArg scriptNode=新OutArg();
//初始化硬件
System.out.println(“初始化硬件”);
context=context.createFromXmlFile(示例XML文件,scriptNode);
depthGenerator=depthGenerator.create(上下文);
imageGenerator=imageGenerator.create(上下文);
context.startggeneratingall();
//记录1
System.out.println(“开始记录1”);
Recorder=Recorder.create(上下文,“oni”);
//添加下一行会生成损坏的文件,但程序运行正常
//createProductionTree(recorder.getInfo());
setDestination(recordmedia.FILE、TEST1\u ONI\u文件);
记录器。添加节点记录(深度生成器);
记录器。添加节点记录(图像生成器);
对于(int i=0;i<100;i++){
waitOneUpdateAll(图像生成器);
recorder.Record();
}
记录器。移除记录(深度发生器);
记录器。移除记录(图像发生器);
recorder.dispose();
//记录2
System.out.println(“开始记录2”);
recorder=recorder.create(上下文,“oni”);
//添加下一行会生成损坏的文件,但程序运行正常
//createProductionTree(recorder.getInfo());
setDestination(recordmedia.FILE、TEST2\u ONI\u文件);
记录器。添加节点记录(深度生成器);
记录器。添加节点记录(图像生成器);
对于(int i=0;i<100;i++){
waitOneUpdateAll(图像生成器);
recorder.Record();
}
记录器。移除记录(深度发生器);
记录器。移除记录(图像发生器);
recorder.dispose();
}捕获(一般异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}最后{
//终端硬件
System.out.println(“终端硬件”);
depthGenerator.dispose();
depthGenerator=null;
imageGenerator.dispose();
imageGenerator=null;
context.release();
context.dispose();
}
}
}
当我尝试设置第二条记录的目标时,我得到一个StatusException“Input pointer is null”

如果添加未注释的行,程序运行正常,但创建的oni文件不可读。(我不知道这条线到底是干什么的。)

我还尝试重新初始化上下文。起初这很好,但当我尝试录制几个文件时,我在重新初始化时也遇到了问题。以下是一些示例代码:

package test;

import org.OpenNI.Context;
import org.OpenNI.DepthGenerator;
import org.OpenNI.GeneralException;
import org.OpenNI.ImageGenerator;
import org.OpenNI.OutArg;
import org.OpenNI.RecordMedium;
import org.OpenNI.Recorder;
import org.OpenNI.ScriptNode;

public class RecorderProblems {

    private static final String SAMPLE_XML_FILE = "KinectConfig.xml";

    public static void main(String[] args) {
        Context context = null;
        DepthGenerator depthGenerator = null;
        ImageGenerator imageGenerator = null;
        try {
            OutArg<ScriptNode> scriptNode = new OutArg<ScriptNode>();

            // Record 1
            for (int i = 0; i < 25; i++) {
                System.out.println("Run " + i);
                // Init Hardware
                System.out.println("Init Hardware " + i);
                context = Context
                        .createFromXmlFile(SAMPLE_XML_FILE, scriptNode);
                depthGenerator = DepthGenerator.create(context);
                imageGenerator = ImageGenerator.create(context);
                context.startGeneratingAll();

                System.out.println("Start Record " + i);
                Recorder recorder = Recorder.create(context, "oni");
                recorder.setDestination(RecordMedium.FILE, "test_" + i + ".oni");
                recorder.addNodeToRecording(depthGenerator);
                recorder.addNodeToRecording(imageGenerator);
                for (int j = 0; j < 100; j++) {
                    context.waitOneUpdateAll(imageGenerator);
                    recorder.Record();
                }
                recorder.removeNodeToRecording(depthGenerator);
                recorder.removeNodeToRecording(imageGenerator);
                recorder.dispose();

                System.out.println("End Hardware " + i);
                depthGenerator.dispose();
                depthGenerator = null;
                imageGenerator.dispose();
                imageGenerator = null;
                context.release();
                context.dispose();
            }

        } catch (GeneralException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
封装测试;
导入org.OpenNI.Context;
导入org.OpenNI.DepthGenerator;
导入org.OpenNI.GeneralException;
导入org.OpenNI.ImageGenerator;
导入org.OpenNI.OutArg;
导入org.OpenNI.recordmedia;
导入org.OpenNI.Recorder;
导入org.OpenNI.ScriptNode;
公共类记录器问题{
私有静态最终字符串SAMPLE\u XML\u FILE=“KinectConfig.XML”;
公共静态void main(字符串[]args){
Context=null;
DepthGenerator DepthGenerator=null;
ImageGenerator ImageGenerator=null;
试一试{
OutArg scriptNode=新OutArg();
//记录1
对于(int i=0;i<25;i++){
System.out.println(“运行”+i);
//初始化硬件
System.out.println(“初始硬件”+i);
上下文=上下文
.createFromXmlFile(示例XML文件,脚本节点);
depthGenerator=depthGenerator.create(上下文);
imageGenerator=imageGenerator.create(上下文);
context.startggeneratingall();
System.out.println(“开始记录”+i);
Recorder=Recorder.create(上下文,“oni”);
setDestination(recordmedia.FILE,“test_”+i+“.oni”);
记录器。添加节点记录(深度生成器);
记录器。添加节点记录(图像生成器);
对于(int j=0;j<100;j++){
waitOneUpdateAll(图像生成器);
recorder.Record();
}
记录器。移除记录(深度发生器);
记录器。移除记录(图像发生器);
recorder.dispose();
系统输出打印项次(“终端硬件”+i);
depthGenerator.dispose();
depthGenerator=null;
imageGenerator.dispose();
imageGenerator=null;
context.release();
context.dispose();
}
}捕获(一般异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
在第三次运行时,我得到一个StatusException“等待新数据时发生超时!”

有人有过机智的经验吗