如何从java中的另一个类调用actionPerformed方法

时间:2016-12-03 22:12:20

标签: java servlets

如何致电

  

actionPerformed(ActionEvent e)

来自另一种方法,即

  

returnHolder()

在我的情况下,所以arraylist可以拥有所有数据,因此我可以使用servlet在localhost上写入数据。现在,在我的

  

的doGet

方法,

  

System.out.println(“列表大小为”+ list.size());

给我零。希望有人可以帮助我。非常感谢。

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();
}

}

1 个答案:

答案 0 :(得分:0)

阅读Your other question之后,您更清楚自己想要做什么。

Servlet和您的主程序存在于不同的JVM中,无法直接对话。

要在它们之间进行通信,您需要进行某种远程通信。在这种情况下,最简单的方法是使用http,因为您已经运行了http服务器。

例如,您可以将doPost方法添加到servlet中,并从主程序中添加一些json数据。有足够的教程从客户端发送http,例如look here

请注意,您不能仅将数据保存为servlet实例中的非静态字段,因为无法保证在与doPost相同的实例上调用doGet。

对于真实系统,您可以将数据保存在数据存储中,可能由框架或持久层抽象。我猜对你来说并非如此。出于学习/教学目的,您可以将数据保存在某个静态成员中,因此doGet和doPost访问相同的数据实例。您还需要保护检索/更新,例如with synchronized,因为doGet和doPost可能来自不同的线程。

您可以从独立客户端示例中查看this question以获取servlet更新。