Comment appeler
actionPerformed (ActionEvent e)
d'une autre méthode, c'est-à-dire
returnHolder ()
dans mon cas, pour que l'arraylist puisse avoir toutes les données afin que je puisse utiliser le servlet pour écrire les données sur l'hôte local. Pour l'instant, dans mon
faire
méthode,
System.out.println ("la taille de la liste est" + list.size ());
me donne zéro. J'espère que quelqu'un pourra m'aider. Merci beaucoup.
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Dummy extends JFrame{
public static ArrayList<String> list = new ArrayList<String>();
public static ArrayList<String> holder = new ArrayList<String>();
public static JButton play;
public Dummy() {
Container content = getContentPane();
play = new JButton("fuck");
play.setEnabled(true);
PlayListener playListener = new PlayListener();
play.addActionListener(playListener);
content.add(play, BorderLayout.SOUTH);
}
class PlayListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
list.add("what");
list.add("the");
list.add("hell");
for(int i = 0; i < list.size(); i++){
holder.add(list.get(i));
}
}
}
public static ArrayList<String> returnHolder() {
//play.doClick();
return holder;
}
public static void main(String args[]) {
JFrame frame = new Dummy();
frame.pack();
frame.show();
}
}
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.tutorials.Dummy;
public class ListJson extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ArrayList<String> list = Dummy.returnHolder();
System.out.println("size of the list is " + list.size());
resp.setContentType("application/json");
PrintWriter writer = resp.getWriter();
for(int i = 0; i < list.size(); i++) {
writer.println(list.get(i));
}
writer.flush();
writer.close();
}
}
Après avoir lu votre autre question, ce que vous voulez faire est plus clair.
Servlet et votre programme principal vivent dans des JVM différents et ne peuvent pas parler directement.
Pour communiquer entre eux, vous avez besoin d'une sorte de communication à distance. Dans ce cas, la méthode la plus simple consiste à utiliser http car vous exécutez déjà le serveur http.
Par exemple, vous pouvez ajouter la méthode doPost à votre servlet et à partir de votre programme principal, y publier des données json. Il y a suffisamment de tutoriels sur l'envoi de http à partir du client, par exemple, regardez ici
Notez que vous ne pouvez pas simplement conserver les données sous forme de champ non statique dans une instance de servlet, car il n'est pas garanti que doGet sera appelé sur la même instance que doPost.
Pour un système réel, vous conserveriez les données dans un stockage de données, probablement abstraites par un cadre ou une couche de persistance. Je suppose que ce n'est pas encore le cas pour vous. À des fins d'étude / de didacticiel, vous pouvez conserver les données dans un membre statique, afin que doGet et doPost accèdent à la même instance de données. Vous devez également garder la récupération / mise à jour, par exemple avec synchronized, car doGet et doPost peuvent provenir de threads différents.
Vous pouvez consulter cette question pour la mise à jour du servlet à partir d'un exemple de client autonome.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots