JavaでJavascriptを呼び出しその結果を文字列として画面に表示させたい
Javaプログラムにて、JavaScriptを実行しその結果を画面のテキストボックスに表示させたいです。
現在調査中のため、ボタンを押したときに「1+2=3」という結果文字列を表示させるプログラムを作成したいところです。
実行結果はeclipseのコンソールには表示されますが、画面のテキストボックスには表示されない状況で困っています。ご教示いただければ幸いです。
エラーは発生していません。
画面イメージ
該当のソースコード
mainクラス
Java
1package test_swing; 2 3import java.awt.EventQueue; 4import java.awt.event.ActionEvent; 5import java.awt.event.ActionListener; 6 7import javax.swing.JButton; 8import javax.swing.JFrame; 9import javax.swing.JLabel; 10import javax.swing.JLayeredPane; 11import javax.swing.JTextField; 12import javax.swing.border.EmptyBorder; 13 14public class test_swing extends JFrame { 15 16 private JLayeredPane contentPane; 17 18 /** 19 * Launch the application. 20 */ 21 public static void main(String[] args) { 22 EventQueue.invokeLater(new Runnable() { 23 @Override 24 public void run() { 25 try { 26 test_swing frame = new test_swing(); 27 frame.setVisible(true); 28 } catch (Exception e) { 29 e.printStackTrace(); 30 } 31 } 32 }); 33 } 34 35 /** 36 * Create the frame. 37 */ 38 public test_swing() { 39 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 40 setBounds(100, 100, 590, 415); 41 contentPane = new JLayeredPane(); 42 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 43 setContentPane(contentPane); 44 contentPane.setLayout(null); 45 46 JLabel lblNewLabel = new JLabel("New label"); 47 lblNewLabel.setBounds(5, 5, 426, 31); 48 contentPane.add(lblNewLabel); 49 50 JTextField txtNewText = new JTextField(); 51 txtNewText.setBounds(5, 50, 200, 31); 52 contentPane.add(txtNewText); 53 54 JButton btnNewButton = new JButton("クリック"); 55 btnNewButton.setBounds(96, 100, 98, 43); 56 btnNewButton.addActionListener(new ActionListener() { 57 @Override 58 public void actionPerformed(ActionEvent e) { 59 ExecJs js = new ExecJs(); 60 String strDisp = "test"; 61 strDisp = js.execute("var a = 1 + 2; print('1 + 2 = '+a);"); 62 txtNewText.setText((String)strDisp); 63 } 64 }); 65 contentPane.add(btnNewButton); 66 } 67 68} 69
JavaScriptを実行するClass
Java
1package test_swing; 2 3import javax.script.ScriptEngine; 4import javax.script.ScriptEngineManager; 5import javax.script.ScriptException; 6 7public class ExecJs { 8 public String execute(String script) { 9 ScriptEngineManager sem = new ScriptEngineManager(); 10 ScriptEngine se = sem.getEngineByName("JavaScript"); 11 12 String strRet = ""; 13 try { 14 strRet = (String)se.eval(script); 15 } catch (ScriptException e) { 16 e.printStackTrace(); 17 } 18 return strRet; 19 } 20} 21
補足情報(FW/ツールのバージョンなど)
Eclipse IDE for Enterprise Java Developers
Version: 2019-03 (4.11.0)
Build id: 20190314-1200
参考サイト
あなたの回答
tips
プレビュー