【问题标题】:StringBuffer into String in Java AppletJava Applet 中的 StringBuffer 到 String
【发布时间】:2013-01-28 11:30:02
【问题描述】:

我有以下 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 文件时,我只会看到一个空屏幕。但是,如果我将普通字符串插入 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() 中的事实有关吗?谢谢你。

【问题讨论】:

    标签: java string applet stringbuffer


    【解决方案1】:

    我怀疑您的 telnet 客户端库需要以某种方式刷新sendCommand() 之后收到的输出。目前,您的 StringBuffer 似乎是空的。

    这与在小程序等中运行无关。(除非 telnet 库本身存在受小程序约束的问题,这总是可能的)

    【讨论】:

      【解决方案2】:

      在 init() 方法中使用远程调用命令不好, 查看小程序后尝试此操作,最好在线程上。

      new Runnabled(){
      public void run(){ 
           //call your method here 
        } 
      }
      

      【讨论】:

        【解决方案3】:

        我不能 100% 确定您的 AutomatedTelnetLibrary 是什么,但我在 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"));
        

        【讨论】:

        • 这是我的 sendCommand() 方法,所以 StringBuffer 被初始化了。
        • public StringBuffer sendCommand(String command) { try { write(command);返回 readUntil(提示 + " "); } 捕捉(异常 e){ e.printStackTrace(); } 返回空值; }
        • 您可以编辑您的帖子并将该代码放入主要问题中吗?另外,请包含 readUntil 函数。
        猜你喜欢
        • 1970-01-01
        • 2014-08-18
        • 2011-01-27
        • 1970-01-01
        • 2011-02-27
        • 1970-01-01
        • 2014-07-10
        • 2012-02-18
        相关资源
        最近更新 更多