我有以下Java Applet的源代码:
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文件时,我只得到一个空屏幕。但是,如果我将一个普通的String插入JLabel(“Testing”)而不是将StringBuffer转换为String,我会在屏幕上显示“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");
}
}
}
为什么会这样?这与我在Applet的方法init()中的事实有什么关系吗?谢谢。
答案 0 :(得分:0)
我怀疑你的telnet客户端库需要在sendCommand()
之后以某种方式刷新收到的输出。目前您的StringBuffer
似乎是空的。
这与在applet等中运行无关(除非telnet库本身存在applet约束的问题,这总是可能的)
答案 1 :(得分:0)
在init()方法中使用带远程调用的命令不好,
查看applet后尝试这个,最好是在一个线程上。
new Runnabled(){
public void run(){
//call your method here
}
}
答案 2 :(得分:0)
我不是100%肯定您的AutomatedTelnetLibrary是什么,但我发现Google Code中的一个似乎与您的格式匹配。如果这不是您使用的,请发布您使用的内容。
public String sendCommand(String command) {
try {
write(command);
return readUntil(prompt + " ");
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
底线是,sendCommand返回一个String,你将它设置为未初始化的StringBuffer。因此,我认为您的StringBuffer没有正确初始化。我真的很惊讶这个代码完全编译...试试这个:
StringBuffer text = new StringBuffer(telnetClient.sendCommand("display gps"));