 
 // Запуск java класса
 program launchprogram;
 {$mode objfpc}{$H+}
 // Подключаем модули с требуемыми
 // нам процедурами и функциями.
 uses 
   Classes, SysUtils, Process, Dialogs;
   
 const C_FNAME = 'init.ini';
 // Опишем переменную "AProcess" 
 // типа "TProcess"
 var 
   AProcess: TProcess;
	tfIn: TextFile;
	dir_jdk, dir_modules, class_name, s3, pr_path, pr_path_dir : string;
        modules : string;

 begin
 
 pr_path:= ParamStr(0);
 pr_path_dir:= ExtractFilePath(pr_path);

 
  // Связываем имя файла с переменной
  AssignFile(tfIn, C_FNAME);
  // Для обработки исключений, используем блок try/except
  try
    // Открыть файл для чтения
    reset(tfIn);

    // Считываем строки, 

      readln(tfIn, dir_jdk);
      readln(tfIn, dir_modules);
      readln(tfIn, modules);
      readln(tfIn, class_name);
	
    // Готово. Закрываем файл.
    CloseFile(tfIn);

  except
    on E: EInOutError do
     //ShowMessage('Ошибка обработки файла. Детали: ' + E.Message);
  end;
   
    if dir_jdk = '' then
     begin
      s3:= 'java';
     end
    else
    begin
       if (dir_jdk[length(dir_jdk)] <> '/') then 
        begin
          dir_jdk:=dir_jdk + '/';
          s3:= dir_jdk + 'bin/java';
        end
		else
		    begin
                s3:= dir_jdk + 'bin/java';
            end;
     end;
    
       
   // Создаем объект  TProcess и
   // присваиваем его переменной AProcess.
   AProcess := TProcess.Create(nil);
 
   // Сообщаем новому AProcess, что это за команда для выполнения.
     AProcess.Executable:= s3;
	
	
	AProcess.Parameters.Add('--module-path');
    AProcess.Parameters.Add(dir_modules);
    AProcess.Parameters.Add('--add-modules');
	AProcess.Parameters.Add(modules);
    AProcess.Parameters.Add('-classpath');
    AProcess.Parameters.Add(pr_path_dir + '/');
	AProcess.Parameters.Add(class_name);
	
   // Мы определим опцию, когда программа 
   // будет запущена. Эта опция гарантирует, что наша программа 
   // не продолжит работу, пока программа, которую мы запустили, 
   // не перестанет работать. 
   AProcess.Options := AProcess.Options + [poWaitOnExit];
 
   // Теперь пусть Process запустит программу
   AProcess.Execute;
  
   
 
   // Пока ppc386 не прекратит работу, мы досюда не дойдем
   AProcess.Free;
     
 end.
