cs_viktor76
Messages postés11Date d'inscriptionjeudi 16 novembre 2006StatutMembreDernière intervention13 novembre 2009
-
8 nov. 2009 à 19:09
cs_viktor76
Messages postés11Date d'inscriptionjeudi 16 novembre 2006StatutMembreDernière intervention13 novembre 2009
-
13 nov. 2009 à 07:48
Bonjour, j'essaye de créer une application Java qui appel du Python. L'application est assez simple je veux entrer un nombre et une fois cliquer sur le bouton qu'il fasse le nombre * 2 qui est dans le python et afficher le résultat
Fenetre.java
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JOptionPane;
import org.python.core.PyObject;
import org.python.core.PyString;
import org.python.core.imp;
public class Fenetre extends JFrame {
private JPanel container = new JPanel();
private JFormattedTextField nombre = new JFormattedTextField(NumberFormat.getIntegerInstance());
private JFormattedTextField resultat = new JFormattedTextField(NumberFormat.getIntegerInstance());
private JLabel label = new JLabel("Table de :");
private JButton b = new JButton ("OK");
private PyObject Exemple;
protected void AppelPy() {
// chargement table.py module
PyObject findMod = imp.importName("table", true);
// prend la "class table"
PyObject ClassTable = findMod.__getattr__("table");
// crée une instance
Exemple = ClassTable.__call__();
}
public void ConstruitPy() {
//construit PY
PyObject res;
res = Exemple.invoke("tableX",new PyString(nombre.getText()));
res = Exemple.invoke("resultat",new PyString(nombre.getText()));
}
public Fenetre()
{
this.setTitle("Table de N");
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
container.setBackground(Color.white);
container.setLayout(new BorderLayout());
JPanel top = new JPanel();
Font police = new Font("Arial", Font.BOLD, 14);
nombre.setFont(police);
nombre.setPreferredSize(new Dimension(150, 30));
nombre.setForeground(Color.BLUE);
b.addActionListener(new BoutonListener());
top.add(label);
top.add(nombre);
top.add(b);
this.setContentPane(top);
this.setVisible(true);
}
class BoutonListener implements ActionListener{
public void actionPerformed(ActionEvent e)
{
JOptionPane jop = new JOptionPane();
jop.showMessageDialog(null, "Le résultat est " + nombre.getText(), "Résultat", JOptionPane.INFORMATION_MESSAGE);
}
}
}
table.py
#! /usr/bin/python
# -*- coding: ISO-8859-1 -*-
class table:
def tableX(n):
print n * 2,
def resultat:
print tableX(n),
Pour le moment j'affiche juste nombre.getText() mais je voudrai à la place qu'il fasse le python et que j'affiche le résultat mais je ne sais pas comment faire si quelqu'un peut m'aider svp ou me donner un tuto... je suis preneur.
cs_RedDog
Messages postés50Date d'inscriptionlundi 7 avril 2003StatutMembreDernière intervention21 août 2013 13 nov. 2009 à 04:24
Pour pouvoir au mieux utiliser Jython, il faut que tu utilises l'API Scripting (JSR 223).
1. Télécharger Jython (si c'est pas déjà fait)
2. Le lier au projet (insérer les librairies JAR dans les librairies de compilation du projet)
3. Importer dans ta classe l'api scripting :
import javax.script.*;
4. Passer l'expression/le script à évaluer dans la fonction.
Exemple avec Ruby (c'est presque pareil pour tous) :
Je peux pas donner d'exemple concret en Jython vu que je ne l'ai fait que sur JRuby avec des interactions de fonctions très sympa au final, mais la logique est à peu près celle là en scripting, renseigne-toi sur l'API. Par exemple ici.
cs_viktor76
Messages postés11Date d'inscriptionjeudi 16 novembre 2006StatutMembreDernière intervention13 novembre 2009 13 nov. 2009 à 07:48
Merci de m'avoir répondu, j'ai réussi à faire marcher mon application Java et Python. Je vais voir pour faire un tuto pour les débutant sur un site avec des applications Java qui font appellent à du Python