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
/**
*
*/
private static final long serialVersionUID = 4690957658239511310L;
private JPanel container = new JPanel();
private JFormattedTextField nombre = new JFormattedTextField(NumberFormat.getIntegerInstance());
private JLabel label = new JLabel("Table de :");
private JButton b = new JButton ("OK");
private PyObject Exemple;
private JOptionPane Resultat;
public Fenetre(String title) {
super(title);
AppelPy();
}
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);
public void actionPerformed(ActionEvent e)
{
JOptionPane jop = new JOptionPane(Resultat);
jop.showMessageDialog(null, "Le résultat est " + nombre.getText(), "Résultat", JOptionPane.INFORMATION_MESSAGE);
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Yliur
Le Mon, 09 Nov 2009 02:55:52 -0600 vistar76 a écrit :
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
[...]
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.
Tu peux exécuter des commandes depuis Java, avec Runtime.getRuntime().exec (...) ;
Ça te crée un processus (classe Process) avec lequel tu peux communiquer en utilisant des flux de communication (récupérables avec getErrorStream(), getInputStream(), getOutputStream()).
Attention : ton exemple est tout petit et ça ne posera pas problème, mais en principe il faut absolument lire ce qui arrive dans les flux d'entrée et d'erreur, sinon si ta commande écrit dans ces flux et au bout d'un moment ils sont pleins (un tampon se remplit quelque part) et ça bloque l'exécution de la commande. Donc il faut lancer des fils d'exécutions (threads) pour lire ces deux flux, même si tu ne fais rien du résultat, juste pour les consommer.
Le Mon, 09 Nov 2009 02:55:52 -0600
vistar76 <vistar76@domain-xyz.in> a écrit :
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
[...]
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.
Tu peux exécuter des commandes depuis Java, avec
Runtime.getRuntime().exec (...) ;
Ça te crée un processus (classe Process) avec lequel tu peux
communiquer en utilisant des flux de communication (récupérables avec
getErrorStream(), getInputStream(), getOutputStream()).
Attention : ton exemple est tout petit et ça ne posera pas problème,
mais en principe il faut absolument lire ce qui arrive dans les flux
d'entrée et d'erreur, sinon si ta commande écrit dans ces flux et au
bout d'un moment ils sont pleins (un tampon se remplit quelque part)
et ça bloque l'exécution de la commande. Donc il faut lancer des
fils d'exécutions (threads) pour lire ces deux flux, même si tu ne
fais rien du résultat, juste pour les consommer.
Le Mon, 09 Nov 2009 02:55:52 -0600 vistar76 a écrit :
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
[...]
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.
Tu peux exécuter des commandes depuis Java, avec Runtime.getRuntime().exec (...) ;
Ça te crée un processus (classe Process) avec lequel tu peux communiquer en utilisant des flux de communication (récupérables avec getErrorStream(), getInputStream(), getOutputStream()).
Attention : ton exemple est tout petit et ça ne posera pas problème, mais en principe il faut absolument lire ce qui arrive dans les flux d'entrée et d'erreur, sinon si ta commande écrit dans ces flux et au bout d'un moment ils sont pleins (un tampon se remplit quelque part) et ça bloque l'exécution de la commande. Donc il faut lancer des fils d'exécutions (threads) pour lire ces deux flux, même si tu ne fais rien du résultat, juste pour les consommer.
jlp
Yliur a écrit :
Le Mon, 09 Nov 2009 02:55:52 -0600 vistar76 a écrit :
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
[...]
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.
Tu peux exécuter des commandes depuis Java, avec Runtime.getRuntime().exec (...) ;
Ça te crée un processus (classe Process) avec lequel tu peux communiquer en utilisant des flux de communication (récupérables avec getErrorStream(), getInputStream(), getOutputStream()).
Attention : ton exemple est tout petit et ça ne posera pas problème, mais en principe il faut absolument lire ce qui arrive dans les flux d'entrée et d'erreur, sinon si ta commande écrit dans ces flux et au bout d'un moment ils sont pleins (un tampon se remplit quelque part) et ça bloque l'exécution de la commande. Donc il faut lancer des fils d'exécutions (threads) pour lire ces deux flux, même si tu ne fais rien du résultat, juste pour les consommer.
ProcessBuilder a plus de fonctionalités que Runtime. Par exemple paramétrage du répertoire d'execution ( depuis java 5 de mémoire).
Yliur a écrit :
Le Mon, 09 Nov 2009 02:55:52 -0600
vistar76 <vistar76@domain-xyz.in> a écrit :
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
[...]
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.
Tu peux exécuter des commandes depuis Java, avec
Runtime.getRuntime().exec (...) ;
Ça te crée un processus (classe Process) avec lequel tu peux
communiquer en utilisant des flux de communication (récupérables avec
getErrorStream(), getInputStream(), getOutputStream()).
Attention : ton exemple est tout petit et ça ne posera pas problème,
mais en principe il faut absolument lire ce qui arrive dans les flux
d'entrée et d'erreur, sinon si ta commande écrit dans ces flux et au
bout d'un moment ils sont pleins (un tampon se remplit quelque part)
et ça bloque l'exécution de la commande. Donc il faut lancer des
fils d'exécutions (threads) pour lire ces deux flux, même si tu ne
fais rien du résultat, juste pour les consommer.
ProcessBuilder a plus de fonctionalités que Runtime. Par exemple
paramétrage du répertoire d'execution ( depuis java 5 de mémoire).
Le Mon, 09 Nov 2009 02:55:52 -0600 vistar76 a écrit :
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
[...]
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.
Tu peux exécuter des commandes depuis Java, avec Runtime.getRuntime().exec (...) ;
Ça te crée un processus (classe Process) avec lequel tu peux communiquer en utilisant des flux de communication (récupérables avec getErrorStream(), getInputStream(), getOutputStream()).
Attention : ton exemple est tout petit et ça ne posera pas problème, mais en principe il faut absolument lire ce qui arrive dans les flux d'entrée et d'erreur, sinon si ta commande écrit dans ces flux et au bout d'un moment ils sont pleins (un tampon se remplit quelque part) et ça bloque l'exécution de la commande. Donc il faut lancer des fils d'exécutions (threads) pour lire ces deux flux, même si tu ne fais rien du résultat, juste pour les consommer.
ProcessBuilder a plus de fonctionalités que Runtime. Par exemple paramétrage du répertoire d'execution ( depuis java 5 de mémoire).
vistar76
vistar76 a écrit le 09/11/2009 à 09h55 :
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
/** * */ private static final long serialVersionUID = 4690957658239511310L; private JPanel container = new JPanel(); private JFormattedTextField nombre = new JFormattedTextField(NumberFormat.getIntegerInstance()); private JLabel label = new JLabel("Table de :"); private JButton b = new JButton ("OK"); private PyObject Exemple; private JOptionPane Resultat;
public Fenetre(String title) { super(title); AppelPy(); }
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);
public void actionPerformed(ActionEvent e) { JOptionPane jop = new JOptionPane(Resultat); jop.showMessageDialog(null, "Le résultat est " + nombre.getText(), "Résultat", JOptionPane.INFORMATION_MESSAGE);
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.
merci pour vos réponses, j'ai fait autrement et je vais en écrire un tuto sur un site pour les débutants. Maintenant j'ai un autre souci, Win32Api. J'ai une application en Python, quand je la lance, j'ai aucun souci, le win32 est bien présent dans site-packages de Python26, ... l'application tourne car il importe bien win32api. En revanche, j'ai crée en java une application avec un bouton pour lancer l'application de python, le seul souci est que lui me met comme erreur : ImportError: No module named win32api Dans PythonPath j'ai passé dans External Librairies le dossier win32 mais toujours le souci. Je trouve pas comment faire pour que celui ci arrive à bien importer le win32api.
Mon autre souci vient aussi du faite que : Code : if sys.platform == 'win32': import win32api else: import pwd
En python win32 est bien mon sys.platform en revanche pour Java il me met java1.6.0_16 dans mon sys.platform. J'ai essayé avec props.setProperty("sys.platform", "win32"); mais le problème reste le même.
vistar76 a écrit le 09/11/2009 à 09h55 :
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
/**
*
*/
private static final long serialVersionUID = 4690957658239511310L;
private JPanel container = new JPanel();
private JFormattedTextField nombre = new
JFormattedTextField(NumberFormat.getIntegerInstance());
private JLabel label = new JLabel("Table de :");
private JButton b = new JButton ("OK");
private PyObject Exemple;
private JOptionPane Resultat;
public Fenetre(String title) {
super(title);
AppelPy();
}
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);
public void actionPerformed(ActionEvent e)
{
JOptionPane jop = new JOptionPane(Resultat);
jop.showMessageDialog(null, "Le résultat est
" + nombre.getText(), "Résultat",
JOptionPane.INFORMATION_MESSAGE);
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.
merci pour vos réponses, j'ai fait autrement et je vais en écrire un tuto sur un site pour les débutants. Maintenant j'ai un autre souci, Win32Api.
J'ai une application en Python, quand je la lance, j'ai aucun souci, le win32 est bien présent dans site-packages de Python26, ... l'application tourne car il importe bien win32api.
En revanche, j'ai crée en java une application avec un bouton pour lancer l'application de python, le seul souci est que lui me met comme erreur :
ImportError: No module named win32api
Dans PythonPath j'ai passé dans External Librairies le dossier win32 mais toujours le souci. Je trouve pas comment faire pour que celui ci arrive à bien importer le win32api.
Mon autre souci vient aussi du faite que :
Code :
if sys.platform == 'win32':
import win32api
else:
import pwd
En python win32 est bien mon sys.platform en revanche pour Java il me met
java1.6.0_16 dans mon sys.platform.
J'ai essayé avec props.setProperty("sys.platform", "win32"); mais le problème reste le même.
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
/** * */ private static final long serialVersionUID = 4690957658239511310L; private JPanel container = new JPanel(); private JFormattedTextField nombre = new JFormattedTextField(NumberFormat.getIntegerInstance()); private JLabel label = new JLabel("Table de :"); private JButton b = new JButton ("OK"); private PyObject Exemple; private JOptionPane Resultat;
public Fenetre(String title) { super(title); AppelPy(); }
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);
public void actionPerformed(ActionEvent e) { JOptionPane jop = new JOptionPane(Resultat); jop.showMessageDialog(null, "Le résultat est " + nombre.getText(), "Résultat", JOptionPane.INFORMATION_MESSAGE);
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.
merci pour vos réponses, j'ai fait autrement et je vais en écrire un tuto sur un site pour les débutants. Maintenant j'ai un autre souci, Win32Api. J'ai une application en Python, quand je la lance, j'ai aucun souci, le win32 est bien présent dans site-packages de Python26, ... l'application tourne car il importe bien win32api. En revanche, j'ai crée en java une application avec un bouton pour lancer l'application de python, le seul souci est que lui me met comme erreur : ImportError: No module named win32api Dans PythonPath j'ai passé dans External Librairies le dossier win32 mais toujours le souci. Je trouve pas comment faire pour que celui ci arrive à bien importer le win32api.
Mon autre souci vient aussi du faite que : Code : if sys.platform == 'win32': import win32api else: import pwd
En python win32 est bien mon sys.platform en revanche pour Java il me met java1.6.0_16 dans mon sys.platform. J'ai essayé avec props.setProperty("sys.platform", "win32"); mais le problème reste le même.