Cocoa/Java : lancer une fonction au démarrage

TR

Membre actif
21 Septembre 2000
109
0
Bonjour, je développe une appli sous Cocoa en Java. Je voudrait savoir comment faire pour lancer une fonction d'une classe quand l'appli se lance.
En java pur, pas de Pb, il suffit de mettre cette fonction dans le main. Mais la le Main est en C!
J'ai essayé de placer cette fonction dans le constructeur de ma classe de "controle" (celle que j'ai créée dans le MainMenu.nib), mais dès que je rajoute un constructeur dans la dite classe, il me gratifie d'une erreur au lancement de l'appli.
J'ai essayé de placer l'appel de ma fonction dans le main.m, mais y comprend pas, vu qu'elle n'est pas en C :-(.

Si quelqu'un a une idée...
Merci d'avance,
Thierry
 
<BLOCKQUOTE><font size="1" face="Verdana, Geneva">quote:</font><HR>Bon apres un bref essai en java, j'arrive tres bien à lancer un construteur de classe instancier par un nib...
Quelle est ton erreur?<HR></BLOCKQUOTE>

Effectivement, je viens d'essayer, ça marche avec un constructeur ... vide!
Le problème vient donc de ce que je met dedans
frown.gif
.

En fait, j'utilise un NSTableView, et je voulais utiliser le constructeur pour l'initialiser (indentifier les colonnes, créer la source de donnée, et l'affecter au TableView).

Le code devrait donc donner :

public class ChatControler {
NSTableView userView;
NSTableColumn; //il n'y a qu'une colonne
DataBase data; //La classe source de données

public ChatControler () {
colonneNom.setIdentifier("nom");
data=new DataBase ();
userView.setDataSource (data);
}
}


Et là ça compile, mais ça me donne l'erreur suivante au moment où je lance l'appli:
ObjCJava WARNING:
jobjc_jvm_newObject(): constructor with signature ()V on class ChatControler failed (should morph the java exception)
Mar 18 15:56:11 ChatServer[2320] AppKitJava: uncaught exception OBJCJava_RUNTIME_EXCEPTION ((null))
Mar 18 15:56:11 ChatServer[2320] AppKitJava: exception = (null description)
Mar 18 15:56:11 ChatServer[2320] AppKitJava: terminating.


Donc, je pense qu'il faut faire appel au constructeur des objets que je veux initialiser (colonneNom et userView). Ce qui donne:

public class ChatControler {
NSTableView userView;
NSTableColumn; //il n'y a qu'une colonne
DataBase data; //La classe source de données

public ChatControler () {
data=new DataBase ();
userView = new NSTableView ();
userView.setDataSource (data);
colonneNom = new NSTableColumn ();
colonneNom.setIdentifier("nom");
}
}


Et là, plus d'erreur au lancement, mais plus aucun résultat quand j'utilise l'interface.
Je suppose que le lancement du fichier nib fait déjà appel à un constructeur pour les objets créés dans IB, et que donc l'ajout des constructeurs dans le constructeur ChatServer fait que ce sont des nouvelles instances, et donc qu'elles ne sont pas "liées" aux autres éléments de l'interface.

Bref je tourne en rond
blush.gif


Merci encore pour votre aide,
Thierry
 
Manu, on a eu le meme reflexe
wink.gif

j'avais pas vu

As-tu esayé le debugger?
Pour l'activer : onglet target, clique sur la target active, clique sur dernier onglet, puis dans l'onglet debugger, et clqiue sur java debugger....

dans ta classe mets un point d'arret dans le constructeur, et au lieu de faire un build fait un debug...
Si je puis me permettre : dans ton code tu as:
<BLOCKQUOTE><font size="1" face="Verdana, Geneva">quote:</font><HR>NSTableColumn; //il n'y a qu'une colonne<HR></BLOCKQUOTE>
cela devrait etre
NSTableColumn colonneNom; //ou un truc dans le genre

<BLOCKQUOTE><font size="1" face="Verdana, Geneva">quote:</font><HR>ps: la fonction awakefromnib n'est pas dispo avec java...<HR></BLOCKQUOTE>
euh, j'en suis plus si sur...
 
Après un vague essai, il faut en fait revenir à l'idée initiale implementer la fonction
void awakeFromNib()
 
Après un vague essai, il faut en fait revenir à l'idée initiale implementer la fonction
void awakeFromNib()
 
Euh, je touche plus à java depuis longtemps, mais je sais que sous obj-c il te suffit de mettre la fonction AwakeFromNib(void) dans ta classe qui est créé par MainMenu.nib...
 
Lorsque tu développes sous Cocoa, Si ton application a une interface graphique, dans l'objet Controller de ton interface, il y a une méthode awakeFromNib qui est appelé avant même que la fenêtre de ton appli s'affiche te donnant ainsi l'occasion d'effetuer des initialisations et même d'exécuter des fonctions au préalable.

A+
 
Bon apres un bref essai en java, j'arrive tres bien à lancer un construteur de classe instancier par un nib...
Quelle est ton erreur?
ps: la fonction awakefromnib n'est pas dispo avec java...
 
Super ! Ca marche !
Effectivement, il suffit d'implémenter awakeFromNib, et tout marche nikel, même en Java.

Merci à tous pour votre aide,
Thierry