[SOLVED] LAMW - jExpression ends application on errors lazarus / 43-Android ---------------------------------------------------------------------- guaracy · 2021-10-04 13:31 Any way to catch java exceptions? Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i procedure TAndroidModule1.jButton1Click(Sender: TObject);var  r: Double;begin  jExpression1.SetFormula('3*(2+2)',[]);  // OK  jExpression1.SetFormula('2/0',[]);  // crash : Division by zero  jExpression1.SetFormula('2/4+',[]); // crash : Invalid number of operands available for '+'  try    r:=jExpression1.Evaluate();  except    ShowMessage('ERROR');  end;  ShowMessage(FloatToStr(r));end; ---------------------------------------------------------------------- jmpessoa · 2021-10-04 17:16 Hi, guaracy! I will try improve the jExpression component! Thank you! ---------------------------------------------------------------------- jmpessoa · 2021-10-05 22:45 Done! 1) Added "inner" java handling to ArithmeticException ("Division by zero")... 2) New methods Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i     function IsExpressionValid(_checkVariablesSet: boolean): boolean;     function CanEvaluate(_checkVariableSet: boolean): boolean;    function GetValue(): double;   3) Updated demo "AppExpressionDemo1" Thank you! ---------------------------------------------------------------------- engkin · 2021-10-06 00:17 In general, exceptions inside Java code can be tested with ExceptionOccurred, and should be cleared with ExceptionClear. Without the latest update by jmpessoa you can write: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i procedure T AndroidModule1.jButton1Click(Sender:TObject);{$push}{$WriteableConst+} const  eIdx:integer=0;{$pop}var  e:array[0..2] of String=('3*(2+2)','2/0','2/4+');  r:string;begin  jExpression1.SetFormula(e[eIdx],[]);  r:=jExpression1.Evaluate.ToString;  if gApp.Jni.jEnv^.ExceptionOccurred(gApp.Jni.jEnv)<>nil then  begin    gApp.Jni.jEnv^.ExceptionClear(gApp.Jni.jEnv);//<--- if you don't clear it, your app will be killed    r:='ERROR';  end;   ShowMessage(e[eIdx]+' = '+r);  inc(eIdx); if eIdx>High(e) then eIdx:=0;end ---------------------------------------------------------------------- guaracy · 2021-10-08 18:02 Thanks jmpessoa. Errors like unbalanced parentheses must be catch inside SetFormula function in Java. Otherwise the application is aborted. Sorry for the code (my first Java lines) but worked here. Code: Java  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i     public void SetFormula(String _expression, String[] _variables) {        try {            mExprBuilder = new ExpressionBuilder(_expression);          mExprBuilder.variables( _variables);            mExpr = mExprBuilder.build();        } catch (Exception e) {            mExpr = null;            Toast toast = Toast.makeText(controls.activity, "Exception on Builder!"/*e.getMessage()*/, Toast.LENGTH_LONG);          if (toast != null) {                //toast.setGravity(Gravity.BOTTOM, 0, 0);                toast.show();            }            Log.e("LAMW", "Exception on Builder!", e);        }    } ---------------------------------------------------------------------- jmpessoa · 2021-10-08 18:52 QuoteSorry for the code (my first Java lines) but worked here. Good code! I will improve based on your code! Thank you! P.S. Done!