# Cocoa/Java : lancer une fonction au démarrage



## TR (18 Mars 2001)

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


----------



## TR (19 Mars 2001)

<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  
	

	
	
		
		

		
			





.

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  
	

	
	
		
		

		
		
	


	




Merci encore pour votre aide,
Thierry


----------



## steg (19 Mars 2001)

Manu, on a eu le meme reflexe  
	

	
	
		
		

		
		
	


	



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...


----------



## steg (19 Mars 2001)

Après un vague essai, il faut en fait revenir à l'idée initiale implementer la fonction
void awakeFromNib()


----------



## steg (19 Mars 2001)

Après un vague essai, il faut en fait revenir à l'idée initiale implementer la fonction
void awakeFromNib()


----------



## steg (19 Mars 2001)

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...


----------



## Manu (19 Mars 2001)

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+


----------



## steg (19 Mars 2001)

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...


----------



## TR (22 Mars 2001)

Super ! Ca marche !
Effectivement, il suffit d'implémenter awakeFromNib, et tout marche nikel, même en Java.

Merci à tous pour votre aide,
Thierry


----------

