Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 拖放;将文件从JList拖放到windows资源管理器,但无法使用JAR/EXE_Java_Swing_Drag And Drop_Jlist_File Transfer - Fatal编程技术网

Java 拖放;将文件从JList拖放到windows资源管理器,但无法使用JAR/EXE

Java 拖放;将文件从JList拖放到windows资源管理器,但无法使用JAR/EXE,java,swing,drag-and-drop,jlist,file-transfer,Java,Swing,Drag And Drop,Jlist,File Transfer,我有一个启用拖放功能的JList。现在,我将Java项目中的一个包中的文件添加到JLista,让它们显示在前面的图标中。现在,如果我从JList到桌面进行D&D,效果很好,但是如果我创建了JAR文件(或者使用launch4j创建了一个EXE文件),那么在JAR中拖放文件就不再有效了。有什么解决办法吗?这是我的Transferable和TransferHandler类,设置为JList: public class TransferableFile implements Transferable {

我有一个启用拖放功能的
JList
。现在,我将Java项目中的一个包中的文件添加到
JList
a,让它们显示在前面的图标中。现在,如果我从
JList
到桌面进行D&D,效果很好,但是如果我创建了
JAR
文件(或者使用
launch4j
创建了一个EXE文件),那么在JAR中拖放文件就不再有效了。有什么解决办法吗?这是我的
Transferable
TransferHandler
类,设置为JList:

public class TransferableFile implements Transferable
{
  private List<File> fileList;

  public TransferableFile(List<File> files)
  {
    fileList = files;
  }

  @Override
  public DataFlavor[] getTransferDataFlavors()
  {
    return new DataFlavor[] { DataFlavor.javaFileListFlavor };
  }

  @Override
  public boolean isDataFlavorSupported(DataFlavor flavor)
  {
    return flavor.equals(DataFlavor.javaFileListFlavor);
  }

  @Override
  public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException
  {
    if (flavor.equals(DataFlavor.javaFileListFlavor))
      return fileList;

    throw new UnsupportedFlavorException(flavor);
  }
}




public class FileListTransferHandler extends TransferHandler
{
  @Override
  public int getSourceActions(JComponent c)
  {
    return COPY;
  }

  @Override
  protected Transferable createTransferable(JComponent c)
  {
    @SuppressWarnings("unchecked")
    JList<File> list = (JList<File>) c;
    File value = (File) list.getSelectedValue();
    Vector<File> files = new Vector<>();
    String listEntry;
    listEntry = value.getAbsolutePath();
    JOptionPane.showMessageDialog(null, listEntry);
    files.add(new File(listEntry));
    TransferableFile tf = new TransferableFile(files);
    return tf;
  }
}
公共类可转移文件实现可转移
{
私有列表文件列表;
公共可传输文件(列表文件)
{
文件列表=文件;
}
@凌驾
公共DataFlavor[]getTransferDataFlavors()
{
返回新的DataFlavor[]{DataFlavor.javaFileListFlavor};
}
@凌驾
支持公共布尔值IsDataFlavor(DataFlavor)
{
返回flavor.equals(DataFlavor.javaFileListFlavor);
}
@凌驾
公共对象getTransferData(DataFlavor flavor)引发不受支持的LavorException、IOException
{
if(flavor.equals(DataFlavor.javaFileListFlavor))
返回文件列表;
抛出新的不受支持的LavorException(flavor);
}
}
公共类FileListTransferHandler扩展了TransferHandler
{
@凌驾
public int getSourceActions(JComponent c)
{
返回副本;
}
@凌驾
受保护的可转让组件(JComponent c)
{
@抑制警告(“未选中”)
JList=(JList)c;
文件值=(文件)列表。getSelectedValue();
向量文件=新向量();
字符串输入;
listEntry=value.getAbsolutePath();
showMessageDialog(null,listEntry);
添加(新文件(listEntry));
TransferableFile tf=新的可转让文件(个文件);
返回tf;
}
}

为了更快地获得更好的帮助,请发布一条消息。在您的SSCCE中,您应该说出发生了什么,而不是您期望的行为。好的,没有发生任何事情。无法将文档从JList复制到资源管理器。从Ecipse开始,它工作得很好。JAR/EXE文件不可用。