テキストファイルの中身をAppletに常に表示
お世話になります。
先日、Appletでの外部ファイルを常に同期させる方法をお尋ねしたものです。
それにより、Servletを併用し試行錯誤していたのですが、どうしても行き詰まり再度質問させて頂きました。
Applet内にあるスレッドから常にServletを呼び出し、
Servlet側では呼び出される度にサーバ上にある外部ファイルを読み込み、
その内容をAppletへ送信してAppletではその受け取ったデータを表示する
というプログラムを組んでみたのですが、
外部ファイルの中身は表示はされず、コンソールにはIllegalStateExceptionが表示されます。
エラー内容を検索したりもしてみたんですが、うまく理解出来ませんでした。
以下にソースを載せておきますので、もしよろしければご教授お願いします。
※Servlet側
package com.test;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;
DataOutputStream dos;
String test=null;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String checkFile="test.log";
String fn=getServletContext().getRealPath(checkFile);
response.setContentType("text/html;charset=Shift_JIS");
PrintWriter out=response.getWriter();
out.println("<html><head></head><body>");
out.println("<applet codebase=\"http://localhost:8080/Test\" code=\"TestApplet.class\" height=\"600\" width=\"800\">");
out.println("</applet>");
out.println("</body></html>");
out.close();
BufferedReader inn = new BufferedReader(new FileReader(fn));
//アプレットへの送信
response.setContentType("application/octet-stream");
dos=new DataOutputStream(response.getOutputStream());
String outPut=inn.readLine();
dos.writeUTF(outPut);
dos.flush();
dos.close();
}
}
※Applet側
import java.applet.Applet;
import java.awt.*;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
public class TestApplet extends Applet implements Runnable{
String inPut;
Label l1;
public void init() {
setSize(200, 100);
setLayout(new FlowLayout());
l1 = new Label("Wait");
add(l1);
Thread wait;
wait = new Thread(this);
wait.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
while(true){
try {
//サーブレットへの通信
URL url=new URL(getDocumentBase(),"./Test");
URLConnection conn = url.openConnection();
//play.logの状態取得
DataInputStream in = new DataInputStream(conn.getInputStream());
l1.setText(in.readUTF());
} catch(Exception e) {
}
Thread.sleep(1000);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}