Java跳过代码行

Java跳过代码行,java,jython,Java,Jython,我有一个JNI包装器将数组从Fortran传递到Java。现在,我需要Java将这个数组传递给Python并返回值 objFuncType.java如下所示: public interface objFuncType { public double calculateobjFunc(double[] pos); } import java.io.*; import java.util.*; import org.plyjy.factory.JythonObjectFactory; p

我有一个JNI包装器将数组从Fortran传递到Java。现在,我需要Java将这个数组传递给Python并返回值

objFuncType.java如下所示:

public interface objFuncType {
    public double calculateobjFunc(double[] pos);
}
import java.io.*;
import java.util.*;
import org.plyjy.factory.JythonObjectFactory;

public class objFunc {

public static double evaluate(double[] position) {
    double result;
    for (int i=0;i<position.length;i++)
       System.out.println("position ="+position[i]);

    JythonObjectFactory factory = JythonObjectFactory.getInstance();
    System.out.println("JythonObjectFactory created");
    objFuncType func=(objFuncType)factory.createObject(objFuncType.class, "CostCalculator");
    result = func.calculateCost(position);
    System.out.println("Result computed! Result = "+result);
    return result;

    }
}
import objFuncType

class CostCalculator(objFuncType, object):

def __init__(self):
    print 'Initializing'
    pass

def calculateCost(self, chromosome):
    fitness = 0
    for i in range(len(chromosome)-1):
        fitness += 100*((chromosome[i]**2)-chromosome[i+1])**2+\
        (1-chromosome[i])**2
    return fitness
position =1.3653333187103271
position =0.0
position =-1.8204443454742432
position =-1.8204443454742432
objFunc.java如下:

public interface objFuncType {
    public double calculateobjFunc(double[] pos);
}
import java.io.*;
import java.util.*;
import org.plyjy.factory.JythonObjectFactory;

public class objFunc {

public static double evaluate(double[] position) {
    double result;
    for (int i=0;i<position.length;i++)
       System.out.println("position ="+position[i]);

    JythonObjectFactory factory = JythonObjectFactory.getInstance();
    System.out.println("JythonObjectFactory created");
    objFuncType func=(objFuncType)factory.createObject(objFuncType.class, "CostCalculator");
    result = func.calculateCost(position);
    System.out.println("Result computed! Result = "+result);
    return result;

    }
}
import objFuncType

class CostCalculator(objFuncType, object):

def __init__(self):
    print 'Initializing'
    pass

def calculateCost(self, chromosome):
    fitness = 0
    for i in range(len(chromosome)-1):
        fitness += 100*((chromosome[i]**2)-chromosome[i+1])**2+\
        (1-chromosome[i])**2
    return fitness
position =1.3653333187103271
position =0.0
position =-1.8204443454742432
position =-1.8204443454742432
当我从外部程序调用Java函数时,输出如下:

public interface objFuncType {
    public double calculateobjFunc(double[] pos);
}
import java.io.*;
import java.util.*;
import org.plyjy.factory.JythonObjectFactory;

public class objFunc {

public static double evaluate(double[] position) {
    double result;
    for (int i=0;i<position.length;i++)
       System.out.println("position ="+position[i]);

    JythonObjectFactory factory = JythonObjectFactory.getInstance();
    System.out.println("JythonObjectFactory created");
    objFuncType func=(objFuncType)factory.createObject(objFuncType.class, "CostCalculator");
    result = func.calculateCost(position);
    System.out.println("Result computed! Result = "+result);
    return result;

    }
}
import objFuncType

class CostCalculator(objFuncType, object):

def __init__(self):
    print 'Initializing'
    pass

def calculateCost(self, chromosome):
    fitness = 0
    for i in range(len(chromosome)-1):
        fitness += 100*((chromosome[i]**2)-chromosome[i+1])**2+\
        (1-chromosome[i])**2
    return fitness
position =1.3653333187103271
position =0.0
position =-1.8204443454742432
position =-1.8204443454742432
数组正在被很好地打印,但是在打印语句之后的所有语句都被跳过。
请帮忙

好吧,我知道了。我使用JNI从C调用Java,它似乎不知道在哪里查找jar文件。我在调用Java的C程序中添加了以下代码行。它按预期运行

JNIEnv* env;
JavaVMInitArgs args;
JavaVMOption options[3];
args.version = JNI_VERSION_1_6;
args.nOptions = 3;
options[0].optionString = "-Djava.class.path=./";
options[1].optionString = "-Djava.class.path=<path_to_class>:<path_to_jars>";
options[2].optionString = "-Djava.class.path=<path_to_class>:<path_to_jars>";
args.options = options;
args.ignoreUnrecognized = 0;
int status;
status = JNI_CreateJavaVM(jvm, (void**)&env, &args);
if (status < 0 || !env)
    printf("Unable to Launch JVM %d\n",rv);
else
    printf("Launched JVM successfully\n");
return env;
JNIEnv*env;
JavaVMInitArgs args;
JavaVMOption选项[3];
args.version=JNI_version_1_6;
args.nOptions=3;
选项[0]。选项字符串=“-Djava.class.path=。/”;
选项[1]。选项字符串=“-Djava.class.path=:”;
选项[2]。选项字符串=“-Djava.class.path=:”;
args.options=选项;
args.ignoreunrecogned=0;
智力状态;
status=JNI_CreateJavaVM(jvm,(void**)&env和args);
如果(状态<0 | |!环境)
printf(“无法启动JVM%d\n”,rv);
其他的
printf(“成功启动JVM\n”);
返回环境;

您如何知道他们被“跳过”?你确定那里没有运行时错误吗?尝试通过
try catch
检查异常当我排除JNI部分并将代码从“evaluate”方法移动到main方法时,它工作正常。但是,当我将此代码与现有JNI包装器集成时,只有第一个print语句输出数组。其余语句被忽略,我看不到其余print语句的输出。我没有得到任何运行时错误。注释掉工厂声明;应该得到下一个println.
catch(Throwable ex)
-确定吗?