2010-02-13 3 views
2

Je souhaite conserver un tableau de chaînes statique pour enregistrer les variables transmises par le client lorsqu'il appelle le serveur, puis pouvoir y accéder depuis le client avec un getter. Pour une raison quelconque, je ne peux obtenir qu'un type très basique (int au lieu d'Integer par exemple) pour fonctionner, tout le reste lance une exception de pointeur nul.Java: Tableau de chaînes statiques sur la classe côté serveur

Voici un extrait de code. (utilisant GWT)

@SuppressWarnings("serial") 
public class GreetingServiceImpl extends RemoteServiceServlet implements AddElection 
{ 

    //this seems to be throwing a NullPointerException: 
    static String[] currentElections; 
    static int index; 

    public String electionServer(String input) { 
     // save currently running elections 
     currentElections[index] = input; 
     index = index + 1; 

     // TODO: getcurrentElections 

Donc. Ma question est la suivante: si je veux stocker temporairement un tableau de chaînes sur le serveur et que je puisse y accéder, comment le ferais-je dans google web toolkit? merci!

Répondre

8

Vous n'avez pas initialisé votre matrice statique.

Au moins, vous devez faire quelque chose comme ceci:

static String[] currentElections = new String[ 100 ]; 

Mais il semble que votre tableau pourrait croître avec le temps, il est donc préférable d'utiliser une classe de collection à la place:

static List<String > currentElections = new ArrayList<String >(); 

public String electionServer(String input) { 
    // save currently running elections  
    currentElections.add(input); 
} 

Mais soyez prudent si cette méthode peut être appelée simultanément à partir de plusieurs clients. Ensuite, vous devez synchroniser l'accès comme ceci:

static List<String > currentElections = 
    Collections.synchronizedList(new ArrayList<String >()); 
+0

aha! merci beaucoup - fonctionne comme un charme! – malangi

+0

au risque de question stoopid, cette liste statique va-t-elle être persistée entre les appels RPC? si oui où? sur la session? et cela viole-t-il la directive «lutter pour l'apatridie» qui est populaire auprès de gens comme Ray Ryan? –

+0

Tous les membres statiques sont stockés avec la classe (pas avec l'objet). Là ils resteront jusqu'à ce qu'ils soient changés ou votre application se termine. – tangens

2

Votre tableau n'est pas initialisé. BTW, vous ne devriez pas utiliser static variables dans une applications multi-thread.

+2

.. sauf si elles sont des constantes de l'application. – BalusC

+1

Quel est un bon moyen de le faire persister sur plusieurs appels alors? – malangi

+4

Données HttpSession –

Questions connexes