電子書籍の厳選無料作品が豊富!

お世話になります。
先日、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();
}

}

}

A 回答 (1件)

エラーが出てるのはAppletのコンソール?サーブレットのコンソール?



サーブレットをWebブラウザを使って直接呼び出した場合は、ファイルの内容が表示されるのでしょうか?

エラーが発生した箇所(ファイル名、行番号)がスタックトレースとしてコンソールに出ていると思うんだけれど。

まずはそうやって発生箇所を絞り込んで行くと良いかと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!