こんにちわ。よろしくお願いします。
現在、JavaAppletを勉強中なのですが、
同じサーバ内にあるテキストファイルをAppletで表示して
手動、もしくは他プログラムからそのテキストファイルが書き換えられても
その書き換えられた後のテキストをAppletで表示する、といった事は可能でしょうか?
Appletはブラウザで開いたまま、としてです。
runメソッドの中にBufferedReaderを置き、
文字列を読み込んだ際に、その前に読み込んだ文字列と比較して、違えばrepaintとしてみたのですが、
Appletを表示したままテキストファイルを書き換えても、以前の文字列のままでした。
キャッシュやセキュリティの問題で、プログラムではどうしようもないものなのでしょうか。
当方、Javaはまだ勉強始めなので、もし解決法が分かる方いましたら、ご教授お願い致します。
No.3ベストアンサー
- 回答日時:
なるほど
ローカルファイルを読んでいるのね。
確かにポリシーもしくは署名の設定が必要だわ。
「Applet」「ローカルファイル」「署名」「ポリシー」
こういった単語で検索すればOKよ。
ちなみにブラウザから利用するなら
Cookieなんて手もあるけどね。
お礼遅くなってしまい申し訳ありません。
やはりそうでしたか。
検索単語までご提示して頂きありがとうございます。
出来るだけユーザー側にセキュリティ関係の解除はさせたくないので
署名は触れない様にしました。
Cookieも試みましたが、最近Cookieをブロックしている方が多いので上記の理由でそちらも見送りました。
出来るだけAppletのみで動作させたかったのですが、サーバーサイドプログラムを併用する方法を取る事にします。
これからご教授頂いたタイムスタンプを取得する方法で作成を試みようと思っています。
ありがとうございました。
No.2
- 回答日時:
通信ゲームが作れるくらいなので、試したことはないですが、理論上は可能です。
この回答への補足
こちらの補足に失礼します。
下に記載したソースはいろいろ試行していた段階のもので、正しくありませんでした。
こちらが作成したプログラムです。
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.URL;
public class AppletTest2 extends Applet implements ActionListener{
Button bt;
String play1,play2=null;
public void init(){
bt = new Button("test.txtの読み込み");
add(bt);
bt.addActionListener(this);
}
public void paint(Graphics g){
String str=play2+"";
g.drawString(str,10,10);
}
@Override
public void actionPerformed(ActionEvent ae) {
InputStream is=null;
try{
is = new URL(getDocumentBase(),"test.txt").openStream();
Reader r = new BufferedReader(new InputStreamReader(is));
StringBuffer stringbuffer = new StringBuffer();
int intchar;
while((intchar=r.read()) != -1 ) {
stringbuffer.append((char)intchar);
}
play1 = stringbuffer.toString();
r.close();
if(!play1.equals(play2)){
play2=play1;
repaint();
}
} catch(IOException e){}
}
}
ご返答ありがとうございます。
Appletは何かと制限が多いので、仕様上の可不可は心配していました。
Appletの通信ゲームあるんですね。見た事なかったです。
頑張ってみます。
No.1
- 回答日時:
原因とは関係ないけど
ファイルが変わった
はファイルのタイムスタンプを見たほうがいいんじゃない?
毎回ストリームを開くのは処理が重過ぎるわ。
さて原因だけど
うまくいかないのはセキュリティとかじゃなくて
単に実装が間違っているためだと思うわよ。
まずは、
画面からのイベントをトリガーにファイルを読み込みなおす
というのを成功させることが大事ね。
それができればリペイントも成功するわ。
この回答への補足
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.URL;
public class AppletTest2 extends Applet implements ActionListener{
Button bt;
String play1,play2=null;
public void init(){
bt = new Button("test.txtの読み込み");
add(bt);
bt.addActionListener(this);
}
public void paint(Graphics g){
String str=getDocumentBase()+"";
g.drawString(str,10,10);
}
@Override
public void actionPerformed(ActionEvent ae) {
InputStream is=null;
try{
System.out.println(getDocumentBase());
is = new URL(getDocumentBase(),"test.txt").openStream();
Reader r = new BufferedReader(new InputStreamReader(is));
StringBuffer stringbuffer = new StringBuffer();
int intchar;
while((intchar=r.read()) != -1 ) {
stringbuffer.append((char)intchar);
}
play1 = stringbuffer.toString();
r.close();
if(!play1.equals(play2)){
play2=play1;
repaint();
}
} catch(IOException e){}
}
}
ご返答ありがとうございます。
タイムスタンプというのは初めて知りました。
無駄に処理を重くしてると分かりつつも、これしか方法思いつかなくて・・・
この問題乗り越えたらタイムスタンプ使ってみようと思います。
とりあえず、スレッド処理をやめて、ActionListenerで再読み込み出来ないかテストプログラムを組んでみましたが、
やっぱり最初だけ読み込んで、テキストファイル更新後は反映されませんでした。
AppletViewerでは正常に動作しましたが、ブラウザで表示するとダメの様です。
補足に試しで作ったテストプログラムを記載しておきますので、お手数おかけしますが、ご指摘頂ければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- その他(ソフトウェア) powershell で出力したテキストファイルをvim で開くと文字化け 2 2023/01/11 21:39
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(プログラミング・Web制作) 2つのテキストファイルを比べて文字列を特定する方法を教えて下さい 5 2022/05/01 15:22
- その他(Microsoft Office) wordの差し込み印刷での日付表示 2 2023/08/15 16:51
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルの一部分を抽...
-
ATTファイルってどうやって開け...
-
Zbarというソフトについて
-
STM32 Nucleo-F446REでデータを...
-
テキストファイルを読み込んで...
-
既存のテキストファイルを開く方法
-
エクセルVBAでメールの自動作成...
-
テキストファイル内の文字の有...
-
N88Basic
-
テキストファイルの特定行の削...
-
pngからepsへの変換
-
[VB.NET] 処理の高速化を行いた...
-
Excel VBAが徐々に遅くなる
-
ファイル変換
-
パイソンでのテキストデータの...
-
C#(.Net)におけるエンコード...
-
VB(VBA)で、バイナリデータを使...
-
テキストファイル固定長データ...
-
エクセルのマクロについて教え...
-
accessでクエリをExcelにエクス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
Excel VBAが徐々に遅くなる
-
テキストファイルの一部分を抽...
-
既存のテキストファイルを開く方法
-
StreamReaderで読み込んだファ...
-
テキストファイルってページの...
-
WORDのVBAで差し込み印刷時、デ...
-
[VB.NET] 処理の高速化を行いた...
-
UTF-8とASCIIコードにおける互...
-
テキストファイルの特定行の削...
-
テキストファイル固定長データ...
-
VBA。開いているテキストファイ...
-
VB(VBA)で、バイナリデータを使...
-
C言語のソースからコメントを抜...
-
テキストファイルをSQLServerデ...
-
ファイル変換
-
テキストデータ変換(プログラ...
-
バイナリデータの中からMidのよ...
-
ExcelのVBAコードについて教え...
-
テキストファイル内容の、16進...
おすすめ情報