java - JTextField 正在更新字符串数据和垃圾数据

标签 java swing jtextfield bytebuffer windowsbuilder

我正在尝试将收到的 ByteBuffer 数据(转换为 String)更新为 JTextField,但文本字段正在打印输出数据以及垃圾值,即使在修剪字符串之后也是如此。

但是在输出控制台中,它正在打印正确的数据,当涉及到 GUI 中的文本字段时,它会与正确的数据一起打印垃圾数据。

import org.usb4java.LibUsb;
import org.usb4java.LibUsbException;

public class UsbRead
{
    static final byte IN_ENDPOINT1 = (byte) 0x82;
    static final int TIMEOUT = 100;
    static final byte INTERFACE = 1;
    static final byte interfaceNum = 1;
    static String s=new String();
    static String dd=new String();

    public static String read(DeviceHandle handle) 
    {
        try{
            System.out.println("-----read-----");
            ByteBuffer buffer = BufferUtils.allocateByteBuffer(30);
            IntBuffer transferred = BufferUtils.allocateIntBuffer();
            System.out.println("capacity-->"+buffer.capacity());
            int result=LibUsb.bulkTransfer(handle, IN_ENDPOINT1, buffer, 
           transferred, TIMEOUT);
            if (result != LibUsb.SUCCESS)
            {
                throw new LibUsbException("Unable to read data", result);
            }
            else
            {
                System.out.println("---------------------------read----------");
                System.out.println(transferred.get() + "-------- bytes read from device");
                s="";
                s = StandardCharsets.UTF_8.decode(buffer).toString();
                System.out.println("s--"+s);
                s.trim();
                WisePanel4.textField_1.setText(s);
                dd=s;
                System.out.println("received data ->"+dd);
            }
            return dd;
        }
        catch(Exception e)
        {
            System.out.println("-*----read time out");

        }
        return dd;
    }
}

输出-->

---------------------------read----------

20-------- bytes read from device

s--192.168.1.108

received data ->192.168.1.108

请检查 GUI 的图像。它正在用正确的数据打印垃圾值:

enter image description here

最佳答案

您很可能收到一个 C 字符串作为响应。因此字符串以 NUL ('\0') 字符结尾。尝试使用以下方法获取值:

s = s.substring(0, s.indexOf('\0'));

关于java - JTextField 正在更新字符串数据和垃圾数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52474560/

相关文章:

java - 无法在tomcat服务器中运行FTPServer java文件

java - JProgressBar 未触发 setProgress 上的 propertyChange

java - 如何在swing中的JTextfield中设置像占位符这样的文本

java - 事件发生时在 JFrame 中动态创建 JTextField

java - 为什么 Java 可以正确获取一个网页的内容,但不能正确获取另一个网页的内容?

java - Java Regex中matches()和find()的区别

使用 Guava FutureCallback 接口(interface)进行 Java 多线程编程

java - 有没有办法只接受 JTextField 中的数值?

java - 自定义 JButton : setText doesn't have effect

java - 如何在不可编辑的 JTextField 中显示图像?