JTextField обновляет данные String вместе с мусором - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь обновить полученные ByteBuffer данные (преобразованные в String) до JTextField, но текстовое поле печатает выходные данные вместе со значениями мусора, даже после обрезки строки.

Но в консоли вывода он печатает правильные данные, когда речь идет о текстовом поле в графическом интерфейсе, он печатает ненужные данные вместе с правильными данными.

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;
    }
}

output ->

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

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

s--192.168.1.108

received data ->192.168.1.108

Пожалуйста, проверьте изображение графического интерфейса.Он печатает ненужное значение с правильными данными:

enter image description here

1 Ответ

0 голосов
/ 24 сентября 2018

Скорее всего, вы получаете C-String в качестве ответа.Таким образом, строка завершается символом NUL ('\ 0').Попробуйте получить значение, используя:

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