0

Java アプレットの次のソース コードがあります。

package m2mcom.web;
import m2mcom.entities.AutomatedTelnetClient;
import javax.swing.JApplet;
import javax.swing.SwingUtilities;
import javax.swing.JLabel;

public class Displaytext extends JApplet {

public void init() {
    try {
        AutomatedTelnetClient telnetClient = new AutomatedTelnetClient();
        telnetClient.connect();

        StringBuffer text = telnetClient.sendCommand("display gps");
        telnetClient.disconnect();

        //String answer = "Testing";
        String answer = text.toString();
        JLabel lbl = new JLabel(answer);
        getContentPane().add(lbl);

    } catch (Exception e) {
        System.err.println("createGUI didn't complete successfully");
    }
}
}

.html ファイルを実行すると、空の画面しか表示されません。ただし、StringBuffer を String に変換するのではなく、通常の String を JLabel ("Testing") に挿入すると、画面に "Testing" という単語が表示されます。私もチェックしましたが、StringBuffer テキスト変数には、対応する telnetClient.sendCommand() メソッドの戻り値があります。次のコードは完全に機能します。

package m2mcom.web;
import m2mcom.entities.AutomatedTelnetClient;
import java.util.*;
import java.io.*;

public class Simple {

public static void main(String [] args) {
    try {
        AutomatedTelnetClient telnetClient = new AutomatedTelnetClient();
        telnetClient.connect();

        StringBuffer text = telnetClient.sendCommand("display gps");
        telnetClient.disconnect();
        System.out.println(text.toString());
    } catch (Exception e) {
        System.err.println("Error");
    }
}
}

なぜこれが起こるのですか?私がアプレットのメソッド init() の中にいるという事実と何か関係がありますか? ありがとうございました。

4

3 に答える 3

0

あなたの AutomatedTelnetLibrary が何であるかについて 100% 確信があるわけではありませんが、あなたのフォーマットに一致すると思われるものをGoogle Codeで見つけました。これがあなたが使用したものでない場合は、使用したものを投稿してください。

    public String sendCommand(String command) {
            try {
                    write(command);
                    return readUntil(prompt + " ");
            }
            catch (Exception e) {
                    e.printStackTrace();
            }
            return null;
    }

要するに、sendCommand は文字列を返します。初期化されていない StringBuffer に設定しています。その結果、 StringBuffer が正しく初期化されていないと思います。私は実際にこのコードがまったくコンパイルされることに驚いています...これを試してください:

StringBuffer text = new StringBuffer(telnetClient.sendCommand("display gps"));
于 2013-01-28T11:41:44.150 に答える
0

あなたの telnet クライアント ライブラリは、次の受信した出力を何らかの方法でフラッシュする必要があると思われますsendCommand()。現在、あなたStringBufferは空のようです。

アプレット内での実行などとは関係ありません (telnet ライブラリ自体にアプレットの制約があるという問題がない限り、これは常に可能です)。

于 2013-01-28T11:33:38.170 に答える
0

init() メソッドでリモート呼び出しを伴うコマンドを使用するのは適切ではありません。できればスレッド上で、アプレットを表示した後にこれを試してください。

new Runnabled(){
public void run(){ 
     //call your method here 
  } 
}
于 2013-01-28T11:37:38.170 に答える