2014-06-28 9 views
0

嗨我正在使用javaoctave包與我的計算機進行八度橋接以執行一些計算。不過,我在編譯時遇到以下錯誤:使用javaoctave破管過程

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 

我不知道我是如何遇到此錯誤的。但是,我仔細檢查了我的輸入,所以我認爲這沒有任何問題。我使用的程序已經成功運行。

希望有人能幫忙,謝謝!

回答

2

這涉及到一些存在於某些Octave版本中的「bug」,其中「save」命令的「 - 」選項未被遵守。這可能是固定在八度的更高版本,但在那之前,你可以修改JavaOctave像這樣:

DataReadFunctor.doReads(final Reader reader),註釋以下行出來:

//  final String createByOctaveLine = readerReadLine(bufferedReader); 
//  if (createByOctaveLine == null || !createByOctaveLine.startsWith("# Created by Octave")) { 
//   throw new OctaveParseException("Not created by Octave?: '" + createByOctaveLine + "'"); 
//  } 

OctaveIO.get(final String name),編輯下面一行:

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

這樣:

final WriteFunctor writeFunctor = new ReaderWriteFunctor(new StringReader("save -text /dev/stdout " + name)); 

釷這些改變應該解決這個問題,或者至少讓你在正確的方向,但我不會建議這是一個補丁,因爲這個錯誤實際上是在一些版本的Octave中('save'的文檔確實說'''是輸出到終端而不是文件的有效選項)