supergaga1712
Messages postés5Date d'inscriptionlundi 18 février 2008StatutMembreDernière intervention24 avril 2008
-
23 avril 2008 à 16:46
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 2010
-
24 avril 2008 à 15:14
Bonjour à tous,
Je travaille actuellement sur une interface
graphique en Java, pour un logiciel codé en C. La partie interface
graphique fonctionne, je désire maintenant faire " communiquer"
l'interface en Java avec du code source en C. Pour le moment, je veux
juste récupérer du texte dans un panneau d'une JFrame pour pouvoir
l'afficher, avec un printf par exemple, ou alors l'afficher dans un
autre panneau de l'interface. Le but est donc d'appeler, grâce au C,
une méthode Java, comme getText par exemple.
J'ai bien suivi
la procédure de JNi, pour les ocmpilations, les entêtes, j'ai généré le
DLL, et fait tourner le fichier java avec un System.LoadLibrary...mais
je tombe sur cette erreur :
"java.lang.NoSuchMethodError: main
Exception in thread "main" "
Quelqu'un aurait il une explication à me fournir, voire des indications sur quelque chose que j'aurais laissé filer ?
Merci d'avance pour la réponse.
Je joins mon code Java ainsi que mon code C :
Code java : désolé pour la longueur, la partie intéressante ( déclaration de méthode native) est à la fin.
public JTextArea ta2;
public JTextArea ta3;
public JTextArea ta1;
public JTextArea ta4;
public String s;
JMenuItem itm;
JMenuItem ito;
JMenuItem itI;
JMenuItem itM;
JFrame f ;
TrySplit () {
//---- creation fenetre
f = new JFrame ("Sirena");
//----création 4 JFrame
JFrame p1 = new JFrame ();
JFrame p2 = new JFrame ();
JFrame p3 = new JFrame ();
JFrame p4 = new JFrame ();
//----création 4 Jlabel
JLabel l1 = new JLabel ("Signaux");
JLabel l2 = new JLabel ("Transferts");
JLabel l3 = new JLabel ("Equations");
JLabel l4 = new JLabel ("Résultats");
//---- on choppe le conteneur des panels
Container c1 = p1.getContentPane();
Container c2 = p2.getContentPane();
Container c3 = p3.getContentPane();
Container c4 = p4.getContentPane();
c1.setLayout (new BorderLayout ());
c2.setLayout (new BorderLayout ());
c3.setLayout (new BorderLayout ());
c4.setLayout (new BorderLayout ());
//---- creation 4 JTextArea
ta1 = new JTextArea ();
ta2 = new JTextArea ();
ta3 = new JTextArea ();
ta4 = new JTextArea();
//---- on place les textarea et les labels correspondants dans les flowlayout
c1.add(l1,BorderLayout.NORTH);
c1.add(ta1);
c2.add(l2,BorderLayout.NORTH);
c2.add(ta2);
c3.add(l3,BorderLayout.NORTH);
c3.add(ta3);
c4.add(l4,BorderLayout.NORTH);
c4.add(ta4);
//---- placées dans des JScrollPane's pour ascenseurs
JScrollPane scrp1 = new JScrollPane (c1);
Dimension d = new Dimension (300, 150);
scrp1.setPreferredSize (d);
JScrollPane scrp2 = new JScrollPane (c2);
//Dimension d = new Dimension (300, 100);
scrp2.setPreferredSize (d);
JScrollPane scrp3 = new JScrollPane (c3);
JScrollPane scrp4 = new JScrollPane (c4);
//---- scrp1+scrp2-> JSplitPane verticale
JSplitPane splp1 = new JSplitPane (JSplitPane.VERTICAL_SPLIT, scrp1, scrp2);
//---- splp1 + scrp3 -> JSplitPane horizontale
JSplitPane splp2 = new JSplitPane (JSplitPane.HORIZONTAL_SPLIT, splp1, scrp3);
JSplitPane splp3 = new JSplitPane (JSplitPane.VERTICAL_SPLIT, splp2, scrp4);
//---- splp2 --> fenetre et on affiche !
f.getContentPane ().add (splp3);
f.pack ();
f.setVisible (true);
JMenuBar mb = new JMenuBar ();//création du menu
JMenu m = new JMenu ("Fichier");//création élément de menu
JMenuItem it = new JMenuItem ("Dossier précédent");
it.addActionListener (this);
m.add (it);
it.setVisible(false);
//JCheckBoxMenuItem itn = new JCheckBoxMenuItem ("pouet");
//itn.addActionListener (this);
//m.add (itn);
ito = new JMenuItem ("ouvrir");
ito.addActionListener (this);
m.add (ito);
JMenuItem ite = new JMenuItem ("Enregistrer");
ite.addActionListener (this);
m.add (ite);
JMenuItem ites = new JMenuItem ("Enregistrer sous");
ites.addActionListener (this);
m.add (ites);
JMenuItem itf = new JMenuItem ("Fermer");
itf.addActionListener (this);
m.add (itf);
JMenuItem iti = new JMenuItem ("Imprimer");
iti.addActionListener (this);
m.add (iti);
JMenuItem itc = new JMenuItem ("Configurer l'imprimante");
itc.addActionListener (this);
m.add (itc);
JMenuItem itq = new JMenuItem ("Quitter");
itq.addActionListener (this);
m.add (itq);
mb.add (m);
JMenu m1 = new JMenu ("Edition");//création élément de menu
JMenuItem it1 = new JMenuItem ("Annuler");
it1.addActionListener (this);
m1.add (it1);
JMenuItem itcou = new JMenuItem ("Couper");
itcou.addActionListener (this);
m1.add (itcou);
JMenuItem itcop = new JMenuItem ("Copier");
itcop.addActionListener (this);
m1.add (itcop);
JMenuItem itcol = new JMenuItem ("Coller");
itcol.addActionListener (this);
m1.add (itcol);
JMenuItem its = new JMenuItem ("Seletionner tout");
its.addActionListener (this);
m1.add (its);
//it1 = new JCheckBoxMenuItem ("pouet");
//it1.addActionListener (this);
//m1.add (it1);
mb.add (m1);
JMenu m2 = new JMenu ("Système");//création élément de menu
JMenuItem it2 = new JMenuItem ("Valider les équations");
it2.addActionListener (this);
m2.add (it2);
//it2 = new JCheckBoxMenuItem ("pouet");
//it2.addActionListener (this);
//m2.add (it2);
JMenuItem ita = new JMenuItem ("Afficher les équations");
ita.addActionListener (this);
m2.add (ita);
itm = new JMenuItem ("Modifier un transfert");
itm.addActionListener (this);
m2.add (itm);
itI = new JMenuItem ("Initialiser les transferts");
itI.addActionListener (this);
m2.add (itI);
JMenuItem itA = new JMenuItem ("Afficher les transferts");
itA.addActionListener (this);
m2.add (itA);
itM = new JMenuItem ("Modifier un signal");
itM.addActionListener (this);
m2.add (itM);
JMenuItem itS = new JMenuItem ("Supprimer un signal");
itS.addActionListener (this);
m2.add (itS);
JMenuItem itaff = new JMenuItem ("Afficher les signaux");
itaff.addActionListener (this);
m2.add (itaff);
JMenuItem itsau = new JMenuItem ("Sauver résultats");
itsau.addActionListener (this);
m2.add (itsau);
JMenuItem itv = new JMenuItem ("Vider résultats");
itv.addActionListener (this);
m2.add (itv);
mb.add(m2);
JMenu m3 = new JMenu ("Analyse");//création élément de menu
JMenuItem it3 = new JMenuItem ("ouvrir");
it3.addActionListener (this);
m3.add (it3);
//it3 = new JCheckBoxMenuItem ("pouet");
//it3.addActionListener (this);
//m3.add (it3);
mb.add(m3);
JMenu m4 = new JMenu ("Réponse");//création élément de menu
JMenuItem it4 = new JMenuItem ("ouvrir");
it4.addActionListener (this);
m4.add (it4);
it4 = new JCheckBoxMenuItem ("pouet");
it4.addActionListener (this);
m4.add (it);
mb.add(m4);
JMenu m5 = new JMenu ("Réglage");//création élément de menu
JMenuItem it5 = new JMenuItem ("ouvrir");
it5.addActionListener (this);
m5.add (it5);
it5 = new JCheckBoxMenuItem ("pouet");
it5.addActionListener (this);
m5.add (it);
mb.add(m5);
JMenu m6 = new JMenu ("Identification");//création élément de menu
JMenuItem it6 = new JMenuItem ("ouvrir");
it6.addActionListener (this);
m6.add (it6);
it6 = new JCheckBoxMenuItem ("pouet");
it6.addActionListener (this);
m6.add (it);
mb.add(m6);
JMenu m7 = new JMenu ("Trait. Signal");//création élément de menu
JMenuItem it7 = new JMenuItem ("ouvrir");
it7.addActionListener (this);
m7.add (it7);
it7 = new JCheckBoxMenuItem ("pouet");
it7.addActionListener (this);
m7.add (it);
mb.add(m7);
JMenu m8 = new JMenu ("Fenêtre");//création élément de menu
JMenuItem it8 = new JMenuItem ("ouvrir");
it8.addActionListener (this);
m8.add (it8);
it8 = new JCheckBoxMenuItem ("toto");
it8.addActionListener (this);
m8.add (it);
mb.add(m8);
JMenu m9 = new JMenu ("Option");//création élément de menu
JMenuItem it9 = new JMenuItem ("ouvrir");
it9.addActionListener (this);
m9.add (it9);
it9 = new JCheckBoxMenuItem ("pouet");
it9.addActionListener (this);
m9.add (it);
mb.add(m9);
JMenu m0 = new JMenu ("Aide");//création élément de menu
JMenuItem it0 = new JMenuItem ("ouvrir");
it0.addActionListener (this);
m0.add (it0);
it0 = new JCheckBoxMenuItem ("pouet");
it0.addActionListener (this);
m0.add (it);
mb.add(m0);
f.setJMenuBar (mb);
f.setSize (new Dimension (800, 600));
f.setVisible (true);
}//fin constructeur
// écouter les évenements
public void actionPerformed (ActionEvent ev)
{
if(ev.getSource()==itm)
{
System.out.println("acion sur bouton");
Transmittance box = new Transmittance();
box.setVisible(true);
f.setVisible(false);
}
if (ev.getSource()==itM)
{
modifi_signal sig = new modifi_signal();
f.setVisible(false);
f.setVisible(true);
sig.setVisible(true);
}
if (ev.getSource()==ito)
{
ouvrir_dossier ouv = new ouvrir_dossier();
f.setVisible(false);
f.setVisible(true);
ouv.setVisible(true);
}
}
public class UseObjects {
private native void changeObject(TrySplit pouet);
{
System.loadLibrary("UseObjImpl");
// Astuce Linux, si vous ne pouvez pas
// positionner le chemin des bibliothèques
// dans votre environnement :
// System.load(
//"/home/bruce/tij2/appendixb/UseObjImpl.so");
}
} ///:~
public void main(String[] args) {
TrySplit gaga=new TrySplit();
UseObjects app = new UseObjects();
app.changeObject(gaga);
}
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 23 avril 2008 à 17:36
Salut,
ton main java n'est pas valide... c'est pas :
public void main(String[] args) {
mais
public static void main(String[] args) {
autre chose :
1 - Ne fait JAMAIS plusieurs fois System.loadLibrary("UseObjImpl"); sinon tu risques de charger plusieurs fois ta lib...et c'est pas bien... le mieux serait de mettre le chargement dans le constructeur static de ta classe exemple :
public class UseObjects {
2 - Tu mets en commentaire :
// Astuce Linux, si vous ne pouvez pas positionner le chemin des bibliothèques dans votre environnement :
hors ce n'est pas valable QUE pour unix mais TOUS les OS de plus si tu dois forcer le chemin de la lib ne fait pas de System.load(xxx) mais utilise l'option -Djava.library.path=lib/path de l'utilitaire 'java'
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 24 avril 2008 à 15:11
Salut,
>"java.lang.NoSuchMethodError: main
>Exception in thread "main" "
>
>C'est cette exception.
Bah je t'ai répondu...
>Par ailleurs, si quelqu'un s'y connaît en JNI, ou connaît quelqu'un qui est calé, je prends :)
C'est cool ça fait plaisir... tellement que je quite ce sujet et te souhaite bonne demerde dans ta recherche de developpeur JNI...
>C'est surtout le code C qui me pose problème à vrai dire.
Absolument rien à voir avec ton erreur..................
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."