Использование сборки Java при разработке

Сборка Java предназначена для выполнения функций на языке Java, получения результатов их работы и дальнейшей работы с полученными данными. В зависимости от сложности и способа реализации выполняемого Java-кода в Fore для выполнения можно использовать следующие методы:

Для выполнения Java-методов потребуется сформировать их JNI-сигнатуру. В таблице ниже представлены сигнатуры основных типов, которые используются виртуальной машиной Java:

Сигнатура Тип Java
Z boolean
B byte
C char
S short
I int
J long
F float
D double
L<идентификатор>; Квалифицированный идентификатор класса
[<тип> Массив заданного типа
(<типы параметров>)<тип результата> Функция, возвращающая какое-либо значение
(<типы параметров>)V Метод, не возвращающий значение

Выполнение функций Java

Статический метод Java.Invoke или Java.InvokeModule используется для выполнения статических Java-методов.

Код на Java:

public class Test {

    public static double staticFunc(double a, double b){

        return (a + b)/2;

    }

}

Код на Fore, реализованный с помощью Java.Invoke:

Var
    Result: Variant;
Begin
    
Result := Java.Invoke("Test""staticFunc""(DD)D"1.02.0);

Для предварительной проверки Java-кода на наличие ошибок компиляции можно использовать метод IJavaUtils.Compile.

Var
    JUtil: IJavaUtils;
    Result: Variant;
Begin
    JUtil := 
New JavaUtils.Create;
    
Try
        JUtil.Compile(
"c:/Work/Java/src/Test.java");
    
Except On e: Exception Do
        Debug.WriteLine(
"Ошибка компиляции: " + e.Message);
    
End Try;
    Result := JUtil.Invoke(
"Test""staticFunc""(DD)D"3.04.0);

Обработка исключительных ситуаций

Обработка всех исключительных ситуаций осуществляются с помощью оператора Try…Except…Finally…End Try. Для обработки ошибок, которые могут возникнуть при компиляции или выполнении Java-метода, используется класс JavaException.

Для примера изменим код выше указанной функции следующим образом:

Код на Java:

public class Test {

    public static double staticFunc(double a, double b, double c){

        if (c==0)

        {

            throw new java.lang.ArithmeticException("Division by zero (parameter c=0)");

        }

        return (a + b)/c;

    }

}

Код на Fore:

Var
    JUtil: IJavaUtils;
    Result: Variant;
Begin
    JUtil := 
New JavaUtils.Create;
    
Try
        Result := JUtil.Invoke(
"Test""staticFunc""(DDD)D"1.02.00.0);
        Debug.WriteLine(Result);
    Except On e: JavaException Do
        Debug.WriteLine(e.Message);
    
End Try;

Данный код выполняет указанную выше функцию staticFunc с набором параметров. При выполнении кода осуществляется обработка возможных исключительных ситуаций с помощью оператора Try…Except…Finally…End Try. Если возникнет ошибка, то текст ошибки будет выведен в консоль среды разработки.

См. также:

Введение в сборку Java