Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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
Java 由于加载标量常量失败,Octave无法计算脚本_Java_Octave - Fatal编程技术网

Java 由于加载标量常量失败,Octave无法计算脚本

Java 由于加载标量常量失败,Octave无法计算脚本,java,octave,Java,Octave,我有一个项目,我需要做几个计算使用倍频程。我使用javaoctave桥与Octave通信。下面是我正在做的简化示例代码 // One of the fields of my class that evaluates equations. This class is provided by teh bridge. private OctaveEngine scriptEngine; // The script contains the equation, e.g.: Ampere = PowerC

我有一个项目,我需要做几个计算使用倍频程。我使用javaoctave桥与Octave通信。下面是我正在做的简化示例代码

// One of the fields of my class that evaluates equations. This class is provided by teh bridge.
private OctaveEngine scriptEngine;
// The script contains the equation, e.g.: Ampere = PowerConsumption (Lights, Dryer, Dishwasher, Laptop, Smartphone);
private String script;

public synchronized void evaluate() {
    // Variable is a class implementing Cloneable and harbouring a unit as well as its unit and a few utility functions.
    LinkedHashSet<Variable> dependentVariables;
    String evaluationErrors;

    Preconditions.checkState(scriptEngine != null);

    try {
        engineErrors.reset();
        scriptEngine.setErrorWriter(engineErrors);
        initParameters();
        scriptEngine.eval(this.script);
    } catch (Exception exception) {
        LOGGER.log(Level.SEVERE, "Error while evaluating script " + this.script, exception); //$NON-NLS-1$
    }

    // The mapping stores the variables and the interface objects changing or reading their values.
    dependentVariables = mapping.getDependentVariables();
    for (Variable variable : dependentVariables) {
        try {
            OctaveDouble result = scriptEngine.get(OctaveDouble.class, variable.getName());
            variable.setValue(result.get(1));
        } catch (Exception exception) {
            LOGGER.log(Level.SEVERE, "Error while retrieving variable " + variable.getName(), exception); //$NON-NLS-1$
        }
    }

    evaluationErrors = engineErrors.toString();

    if (evaluationErrors.length() > 0) {
        LOGGER.log(Level.WARNING, "Error while evaluating equation :" + evaluationErrors); //$NON-NLS-1$
    }
}

private void initParameters() {
    for (Variable variable : lockedMapping.getIndependentVariables()) {
        Double numericValue = Double.valueOf(variable.getValue().toString());

        if (isNegative(numericValue)) {
            numericValue *= -1d;
        }
        scriptEngine.put(variable.getName(), Octave.scalar(numericValue));
    }
}

private static boolean isNegative(double _double) {
    return Double.doubleToRawLongBits(_double) < 0;
}
用谷歌搜索一点,发现负值(或大输入)会导致这个问题。然而,这一问题被认为已经解决。我没有大的输入,我试图确保我的值是正的(甚至通过使用syso进行测试

我对根本原因进行了更深入的搜索,并偶然发现了它。在类中,调用
future.get()
getFromFuture
方法的第157行,抛出了一个
ExecutionException
。下面是即时堆栈跟踪:

java.util.concurrent.ExecutionException: dk.ange.octave.exception.OctaveIOException: IOException during close
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at dk.ange.octave.exec.OctaveExec.getFromFuture(OctaveExec.java:157)
    at dk.ange.octave.exec.OctaveExec.eval(OctaveExec.java:142)
    at dk.ange.octave.io.OctaveIO.set(OctaveIO.java:56)
    at dk.ange.octave.OctaveEngine.put(OctaveEngine.java:141)
    at [redacted].OctaveEquation.initParameters(OctaveEquation.java:109)
    at [redacted].OctaveEquation.evaluate(OctaveEquation.java:72)
    at [redacted].LinearEquationSystem.inputChanged(LinearEquationSystem.java:105)
    at [redacted].variable.NumericalVariable.setValue(NumericalVariable.java:127)
    at [redacted].widget.ValueWidget.actionDrop(ValueWidget.java:88)
    at [redacted].TangibleObjectManager.dropObject(TangibleObjectManager.java:207)
    at [redacted].adapter.TuioAdapter.addTangibleObject(TuioAdapter.java:318)
    at [redacted].adapter.TuioAdapter.addTuioObject(TuioAdapter.java:295)
    at TUIO.TuioClient.acceptMessage(TuioClient.java:339)
    at com.illposed.osc.utility.OSCPacketDispatcher.dispatchMessage(OSCPacketDispatcher.java:73)
    at com.illposed.osc.utility.OSCPacketDispatcher.dispatchPacket(OSCPacketDispatcher.java:49)
    at com.illposed.osc.utility.OSCPacketDispatcher.dispatchBundle(OSCPacketDispatcher.java:56)
    at com.illposed.osc.utility.OSCPacketDispatcher.dispatchPacket(OSCPacketDispatcher.java:40)
    at com.illposed.osc.OSCPortIn.run(OSCPortIn.java:65)
    at java.lang.Thread.run(Unknown Source)
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:1)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    ... 1 more
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(Unknown Source)
    at dk.ange.octave.exec.OctaveExecuteReader.close(OctaveExecuteReader.java:96)
    at dk.ange.octave.exec.OctaveReaderCallable.call(OctaveReaderCallable.java:61)
    ... 5 more
java.util.concurrent.ExecutionException: dk.ange.octave.exception.OctaveIOException: IOException during close
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at dk.ange.octave.exec.OctaveExec.getFromFuture(OctaveExec.java:157)
    at dk.ange.octave.exec.OctaveExec.eval(OctaveExec.java:142)
    at dk.ange.octave.io.OctaveIO.set(OctaveIO.java:56)
    at dk.ange.octave.OctaveEngine.put(OctaveEngine.java:141)
    at [redacted].OctaveEquation.initParameters(OctaveEquation.java:109)
    at [redacted].OctaveEquation.evaluate(OctaveEquation.java:72)
    at [redacted].LinearEquationSystem.inputChanged(LinearEquationSystem.java:105)
    at [redacted].variable.NumericalVariable.setValue(NumericalVariable.java:127)
    at [redacted].widget.ValueWidget.actionDrop(ValueWidget.java:88)
    at [redacted].TangibleObjectManager.dropObject(TangibleObjectManager.java:207)
    at [redacted].adapter.TuioAdapter.addTangibleObject(TuioAdapter.java:318)
    at [redacted].adapter.TuioAdapter.addTuioObject(TuioAdapter.java:295)
    at TUIO.TuioClient.acceptMessage(TuioClient.java:339)
    at com.illposed.osc.utility.OSCPacketDispatcher.dispatchMessage(OSCPacketDispatcher.java:73)
    at com.illposed.osc.utility.OSCPacketDispatcher.dispatchPacket(OSCPacketDispatcher.java:49)
    at com.illposed.osc.utility.OSCPacketDispatcher.dispatchBundle(OSCPacketDispatcher.java:56)
    at com.illposed.osc.utility.OSCPacketDispatcher.dispatchPacket(OSCPacketDispatcher.java:40)
    at com.illposed.osc.OSCPortIn.run(OSCPortIn.java:65)
    at java.lang.Thread.run(Unknown Source)
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:1)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    ... 1 more
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(Unknown Source)
    at dk.ange.octave.exec.OctaveExecuteReader.close(OctaveExecuteReader.java:96)
    at dk.ange.octave.exec.OctaveReaderCallable.call(OctaveReaderCallable.java:61)
    ... 5 more
我在一台Windows 7机器上工作,在我的类路径上有八度音阶的路径,不确定我做错了什么。我假设在IO过程中出现了一些错误,但我似乎无法确定

为了确保我所有的输入都是已知的,下面是包含这两个脚本的*.m文件。我所有的输入都是正数,范围从0到2200(双倍)

第二个:

function Ampere = PowerConsumption(Lights, Dryer, Dishwasher, Laptop, Smartphone)
Ampere = (Lights + Dryer + Dishwasher + Laptop + Smartphone) / 230;
function Load = CircuitLoad(Breaker, Lights, Dryer, Dishwasher, Laptop, Smartphone)
Load = Breaker / ((Lights + Dryer + Dishwasher + Laptop + Smartphone) / 230);
function Ampere = PowerConsumption(Lights, Dryer, Dishwasher, Laptop, Smartphone)
Ampere = (Lights + Dryer + Dishwasher + Laptop + Smartphone) / 230;