Перетащите изображения из папки в JTextPane - PullRequest
1 голос
/ 04 ноября 2011

Я хочу реализовать JTextPane для редактирования текста, используя изображения, которые я перетаскиваю из моей системы в JTextPane. Я попытался реализовать это, используя JTextPane в качестве суперкласса и DropTargetListener в качестве интерфейса. Но когда я пытаюсь прочитать мой InputStream, я получаю NullPointerException. Пожалуйста, помогите.

import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.io.*;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JTextPane;

public class JTextTest extends JTextPane implements DropTargetListener {

private static final long serialVersionUID = 1L;

public JTextTest() {
    new DropTarget(this, this);
    this.setDragEnabled(true);
}

@Override
public void dragEnter(DropTargetDragEvent arg0) {
}

@Override
public void dragExit(DropTargetEvent arg0) {
}

@Override
public void dragOver(DropTargetDragEvent arg0) {
}

@Override
public void drop(DropTargetDropEvent dropTargetDropEvent) {
    System.out.println("Drop event");
    Transferable transferable = dropTargetDropEvent.getTransferable();
    for (DataFlavor d : transferable.getTransferDataFlavors()) {
        if (d.isRepresentationClassInputStream()) {
            dropTargetDropEvent
                    .acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
            try {
                InputStream is = new BufferedInputStream(
                        (InputStream) transferable.getTransferData(d));

                ImageIcon image = new ImageIcon(ImageIO.read(is));
                this.insertIcon(image);
            } catch (UnsupportedFlavorException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } 

        } else {
            dropTargetDropEvent.rejectDrop();
        }
    }
    dropTargetDropEvent.getDropTargetContext().dropComplete(true);
}

@Override
public void dropActionChanged(DropTargetDragEvent arg0) {
}
}

1 Ответ

1 голос
/ 04 ноября 2011

Попробуйте с этим фрагментом,

ImageIcon image = new ImageIcon(ImageIO.read(createImageInputStream(is)));

ImageIO.read () ожидает файл , ImageInputStream , InputStream или URL и обратите внимание, что при работе с изображениями большая часть NullPointerException генерируется, когда возникает проблема (более конкретно, чтение изображения возвращает ноль) с изображением, источником изображения или чтением из этого источника.

...