2016-12-03 131 views
0

我怎麼叫我如何調用actionPerformed方法從另一個類在java中

的actionPerformed(ActionEvent的五)

從另一種方法,那就是

returnHolder( )

在我的情況,這樣arraylist可以擁有所有那麼我可以使用servlet將數據寫入本地主機。現在,在我的

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

}

回答

0

閱讀Your other question後更清楚自己想要做什麼。

Servlet和你的主程序生活在不同的JVM中,不能直接通話。

要在它們之間進行通信,您需要某種遠程通信。在這種情況下,最簡單的方法是使用http,因爲您已經運行http服務器。

例如,您可以將doPost方法添加到您的servlet,並從您的主程序發佈一些json數據。有足夠的教程可以從客戶端發送http,例如look here

請注意,您不能將數據保存爲servlet實例中的非靜態字段,因爲不能保證doGet將在與doPost相同的實例上被調用。

對於現實生活中的系統,您可能會將數據保存在數據存儲中,可能會被框架或持久層抽象出來。我想對你來說情況並非如此。爲了學習/教程目的,您可以將數據保留在某個靜態成員中,因此doGet和doPost訪問相同的數據實例。你還需要警惕檢索/更新與同步,因爲doGet和doPost可能來自不同的線程。

您可以查看this question以瞭解獨立客戶端示例中的servlet更新。

+0

謝謝你的幫助。我認爲doGet正在向服務器寫入json – vkosyj

+0

我認爲你需要專用一個小時並閱讀關於servlet的一些教程,它會比嘗試去猜測它快得多。 Http servlet方法向/從http客戶端寫入或接收數據。 您的doGet會將數據寫入某些客戶端,例如瀏覽器(注意你的方法不正確,因爲你寫的不是JSON,所以你也需要一些工作)。 從你的揮杆應用程序,你想**更新**服務器上的數據。最簡單的方法是從http post發送服務器上的數據,並且需要用另一種方法處理接收到的數據,而不是返回數據的doGet。 –

+0

實際上,您可以通過區分通過url參數獲取或更新的方式,以相同的doGet方法以稍微難看的方式處理它,但將它們分開會更清晰。 –

相關問題