У меня есть обертка JNI для передачи массивов из Fortran в Java. Теперь я требую, чтобы Java передала этот массив в Python и вернул значение.Java пропускает строки кода
objFuncType.java выглядит следующим образом:
public interface objFuncType {
public double calculateobjFunc(double[] pos);
}
objFunc.java выглядит следующим образом:
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;
}
}
CostCalculator.py выглядит следующим образом:
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
Когда я называю Java из внешней программы, выход выглядит следующим образом:
position =1.3653333187103271
position =0.0
position =-1.8204443454742432
position =-1.8204443454742432
Массив печатается отлично, но все утверждения после инструкции печати пропускаются. Пожалуйста, помогите!
Откуда вы знаете, что они «пропущены»? Вы уверены, что где-то там нет ошибки времени выполнения? – brso05
попробуйте проверить исключение 'try catch' – silentprogrammer
Когда я исключаю часть JNI и переставляю код из метода« оцениваю »на главный метод, он отлично работает. Однако, когда я интегрирую этот код с существующей оболочкой JNI, только первый оператор печати выводит массив. Остальные утверждения игнорируются, и я не вижу вывода для остальных операторов печати. Я не получаю ошибок во время выполнения. –