使用javaoctave的断管过程

使用javaoctave的断管过程,java,eclipse,octave,Java,Eclipse,Octave,嗨,我正在使用javaoctave包与我的计算机中的octave桥接,以执行一些计算。但是,我在编译时遇到以下错误: error: save: Unrecognized option '-' Exception in thread "main" dk.ange.octave.exception.OctaveIOException: IOException during close at sun.reflect.NativeConstructorAccessorImpl.newInstan

嗨,我正在使用javaoctave包与我的计算机中的octave桥接,以执行一些计算。但是,我在编译时遇到以下错误:

error: save: Unrecognized option '-'
Exception in thread "main" dk.ange.octave.exception.OctaveIOException: IOException during close
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at dk.ange.octave.exec.OctaveExec.reInstantiateException(OctaveExec.java:184)
    at dk.ange.octave.exec.OctaveExec.getFromFuture(OctaveExec.java:165)
    at dk.ange.octave.exec.OctaveExec.eval(OctaveExec.java:142)
    at dk.ange.octave.io.OctaveIO.get(OctaveIO.java:75)
    at dk.ange.octave.OctaveEngine.get(OctaveEngine.java:161)
    at dk.ange.octave.OctaveEngine.get(OctaveEngine.java:176)
    at learn.capability.CapabilityMeanVarianceEquation.learnCapabilities(CapabilityMeanVarianceEquation.java:214)
    at learn.graph.SimulatedAnnealingLearner.learnSynergyGraph(SimulatedAnnealingLearner.java:69)
    at parse.basketball.runner.GetPlayerFrequency.learnSynergyGraph(GetPlayerFrequency.java:112)
    at parse.basketball.runner.GetPlayerFrequency.main(GetPlayerFrequency.java:96)
Caused by: dk.ange.octave.exception.OctaveIOException: IOException during close
    at dk.ange.octave.exec.OctaveReaderCallable.call(OctaveReaderCallable.java:65)
    at dk.ange.octave.exec.OctaveReaderCallable.call(OctaveReaderCallable.java:28)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:695)
Caused by: java.io.IOException: Pipe to octave-process broken
    at dk.ange.octave.exec.OctaveExecuteReader.read(OctaveExecuteReader.java:68)
    at java.io.Reader.read(Reader.java:123)
    at dk.ange.octave.exec.OctaveExecuteReader.close(OctaveExecuteReader.java:96)
    at dk.ange.octave.exec.OctaveReaderCallable.call(OctaveReaderCallable.java:61)
    ... 6 more
我不知道我是怎么遇到这个错误的。然而,我已经仔细检查了我的输入,所以我认为这没有任何问题。我使用的程序以前已成功运行

希望有人能帮忙,谢谢

这与某些八度音阶版本中存在的“bug”有关,在这些版本中,“save”命令的“-”选项不受尊重。这可能在Octave的后续版本中得到了修复,但在此之前,您可以这样修改JavaOctave:

DataReadFunctor.doReads(最终读取器)
中,注释掉以下行:

//        final String createByOctaveLine = readerReadLine(bufferedReader);
//        if (createByOctaveLine == null || !createByOctaveLine.startsWith("# Created by Octave")) {
//            throw new OctaveParseException("Not created by Octave?: '" + createByOctaveLine + "'");
//        }
OctaveIO.get(最终字符串名)
中,编辑以下行:

final WriteFunctor writeFunctor = new ReaderWriteFunctor(new StringReader("save -text - " + name));
为此:

final WriteFunctor writeFunctor = new ReaderWriteFunctor(new StringReader("save -text /dev/stdout " + name));
这些更改应该可以解决这个问题,或者至少可以让您找到正确的方向,但我不建议将其作为补丁,因为该缺陷实际上存在于某些版本的Octave中(save文档确实指出“-”是输出到终端而不是文件的有效选项)