Chamar método JavaScript via Java Desktop

E aí pessoal, beleza? Depois de uma discussão com um amigo sobre chamar funções do js no java, eu acabei achando uns trechos de código bem interessante, vou estar postando aqui para futuras dúvidas.

Bom, primeiro eu criei um arquivo chamado script.js e dentro dele uma função bem básica (JavaScript):

function multiplicar(numero) { 
  return numero * numero; //Basicamente ele só vai multiplicar o número por ele mesmo.
}

É isso, criei o arquivo, inseri a função, salvei. OK.

Fui na minha IDE e criei o seguinte método (Java):

public void multiplicarNumero(int numero) throws NoSuchMethodException, FileNotFoundException, ScriptException { 
    //NoShuchMethod (Método não encontrado), FileNotFound (Arquivo não encontrado), ScriptException (Como o nome já diz, tem erro no seu script).
    ScriptEngineManager factory = new ScriptEngineManager(); // Permite escolher linguagens diferentes da tradicional Java
    ScriptEngine engine = factory.getEngineByName("JavaScript"); //Escolhemos a linguagem que será utilizada, nesse caso é o JavaScript
    Invocable invocable = (Invocable) engine;

    engine.eval(new FileReader("C:\\Imperium\\script.js")); //escolhemos onde o arquivo está, pasta+arquivo.extensao
    Double resultado = (Double) invocable.invokeFunction("multiplicar", numero); //Aqui chamamos o a Function do nosso Script ("multiplicar") e passamos a variável "número" que declaramos no método.
    System.out.println("O resultado da sua função é: " + resultado); //Aqui a gente mostra o resultado
}

Saída: O resultado da sua função é: 100.0

Espero que seja útil para vocês :smiley:

Desde que o java percebeu o quanto scripts são poderosos e passou a oferecer suporte a isso, o mundo não é mais o mesmo.
Porém, acho bem válido, chegamos a usar em alguns projetos e a diferença em termos de poder de processamento é enorme.

1 curtida

Opa. Não tinha lido os “//”. Bacana, Abner. Parabéns novamente!

1 curtida

Única correção é nessa linha. O que você tem que chamar é o método que o JS vai usar, no seu caso, “multiplicar”);

1 curtida

Opa, isso mesmo Fear, valeu, não me atentei nessa linha. Obrigado!