我正在尝试使用

Java 7 Update 21进行拖放.

我的目标操作系统是:

> Windows 7

> Ubuntu 12.04

> Mac OSX 10.6 / 10.8

要求是:

>从文件系统拖动文件并将其放到我的Java应用程序(制作一个

将文件复制到临时目录) – >适用于Linux& MacOSX&视窗

拖动Thunderbird的电子邮件并将其放到我的Java应用程序(保存)

他们作为完整的* .eml文件在文件系统上)

以下代码适用于我的Windows,MacOSX和Ubuntu应用程序的简单文件.另一个要求是将Thunderbird的电子邮件删除到我的Java应用程序(邮件自动转换为* .eml文件并存储到磁盘).这也适用于Windows,但是我在Ubuntu和MacOSX中得到了一个“Data Flavor not supported exception”

编辑:我在Ubuntu上尝试使用OpenJDK 7,但是即使是正常的文件丢失也不起作用.只有使用JDK版本的Oracle.

有人有一个想法如何修复/实现吗?

提前谢谢了!

这是一个简单的可执行示例:

import java.awt.datatransfer.DataFlavor;

import java.awt.datatransfer.Transferable;

import java.awt.datatransfer.UnsupportedFlavorException;

import java.awt.dnd.DnDConstants;

import java.awt.dnd.DropTarget;

import java.awt.dnd.DropTargetDropEvent;

import java.io.File;

import java.io.IOException;

import java.nio.file.Files;

import java.nio.file.Paths;

import java.nio.file.StandardCopyOption;

import java.util.List;

public class DragDropTest extends javax.swing.JFrame {

public DragDropTest() {

initComponents();

initDragAndDrop();

}

private void initDragAndDrop() {

this.setDropTarget(new DropTarget(){

@Override

public synchronized void drop(DropTargetDropEvent dtde) {

try {

Transferable transfer = dtde.getTransferable();

if(transfer.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {

dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);

List objects = (List)transfer.getTransferData(DataFlavor.javaFileListFlavor);

for(Object object : objects) {

if(object instanceof File) {

File source = (File)object;

File dest = new File(System.getProperty("user.home")+File.separator+source.getName());

Files.copy(Paths.get(source.getAbsolutePath()),Paths.get(dest.getAbsolutePath()),StandardCopyOption.REPLACE_EXISTING);

System.out.println("File copied from "+source.getAbsolutePath()+" to "+dest.getAbsolutePath());

}

}

} else if(transfer.isDataFlavorSupported(DataFlavor.stringFlavor)) {

dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);

String type = (String)transfer.getTransferData(DataFlavor.stringFlavor);

System.err.println("Data flavor not supported: "+type);

} else {

System.err.println("Data flavor not supported.");

}

} catch(UnsupportedFlavorException ex) {

System.err.println(ex.getMessage());

} catch(IOException ex) {

System.err.println(ex.getMessage());

} catch(Exception ex) {

System.err.println(ex.getMessage());

} finally {

dtde.dropComplete(true);

}

}

});

}

@SuppressWarnings("unchecked")

private void initComponents() {

setDefaultCloSEOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

setTitle("Drag & Drop");

setResizable(false);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0,200,Short.MAX_VALUE)

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0,Short.MAX_VALUE)

);

pack();

}

public static void main(String args[]) {

new DragDropTest().setVisible(true);

}

}

java 拖拽目录_Java 7:如何在Java中实现拖放?相关推荐

  1. java 拖拽生成_JAVA UI 拖拽功能

    java GUI拖拽功能是很实用也相对高级一些的功能. 有一小部分的GUI控件支持 他们有dragEnabled属性.这些JComponent包括: javax.swing.JColorChooser ...

  2. Java拖拽控件数据库_java实现鼠标拖放功能代码实例

    java实现鼠标拖放功能代码实例 利用鼠标的拖放来交换程序的数据,即所谓的鼠标拖放功能.鼠标的拖放功能在图形化系统中非常常用,Java 提供了java.awt.dnd 和java.awt.datatr ...

  3. java 如何级联删除_Java学习-040-级联删除目录中的文件、目录

    之前在写应用模块,进行单元测试编码的时候,居然脑洞大开居然创建了一个 N 层的目录,到后来删除测试结果目录的时候,才发现删除不了了,提示目录过长无法删除.网上找了一些方法,也找了一些粉碎机,都没能达到 ...

  4. php 拖拽 上传文件 进度,在Vue中如何实现带进度条的文件拖动上传功能

    这篇文章主要介绍了Vue实现带进度条的文件拖动上传功能,本文通过实例代码给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下 1. 基本界面 content="width=devic ...

  5. 如何在 JavaScript 中实现拖放

    来源:http://www.javaeye.com/post/152142 译者说明: 终于完成了全文的翻译,由于时间比较参促,文章没有过多的校正与润色,阅读过程中难免会有些许生硬或不准确的感觉,请大 ...

  6. java 鼠标拖拽事件_Java实现鼠标拖拽移动界面组件

    默认的,Frame或者JFrame自身已经实现了鼠标拖拽标题栏移动窗口的功能. 只是,当你不满意java的JFrame样式,隐藏了标题栏和边框,又或者干脆直接使用JWindow,那你又该怎么实现鼠标拖 ...

  7. java 拖拽上传_Java swing怎么实现上传文件并支持拖拽上传

    展开全部 你这个复杂了,我稍微说说吧. 进度条稍微简单点,你就去看看Oracle的tutorial就行了,记得运用科学(或32313133353236313431303231363533e78988e ...

  8. Java 拖拽文件到文本框

    Java中如何把文件拖拽到文本框呢? 先看一个例子:     核心代码: Java代码   /*** * 拖拽文件到文本框 * @param component */ public void drag ...

  9. Java拖拽排序工具类

    package com.ciih.jwt.util.sort;import java.lang.reflect.Field; import java.util.Collections; import ...

最新文章

  1. POJ 2828 Buy Tickets | 线段树的喵用
  2. ARTS打卡计划第四周-ALGORITHM
  3. SSH免密登录详细操作步骤
  4. android摄像头代码,Android摄像头
  5. Notepad++如何编译、运行Java
  6. 斯坦福2019秋季课程:图机器学习资料全公开
  7. python程序设计课程设计二级减速器_二级减速器课程设计
  8. HDU - 4622 Reincarnation
  9. 倒酒(拓展欧几里得)
  10. html5谷歌地图,谷歌地图API和HTML 5
  11. 弹出停止U盘安全删除硬件的命令
  12. 拉伯证券|大股东或易主,阿里巴巴换股入局
  13. 关于抽象工厂模式的定义和实现
  14. MATLAB-7-程序流程控制
  15. Vue——props配置
  16. php ppt生成图片不显示,ppt图片在word中不能正常显示,只显示为矩形框的解决方法...
  17. 这五个资源网站真的是非常强大 请尽快收藏
  18. 浏览器Goole Chrome调试工具
  19. 学生管理系统(完整版)
  20. 前端开发规范:JavaScript 规范

热门文章

  1. CoreML的入门例子
  2. leetcode 617. Merge Two Binary Trees | 617. 合并二叉树(Java)
  3. 【Python爬虫】写个爬虫爬取自己的博客,可以刷访问量
  4. Hive体系结构(一)架构与基本组成
  5. width用计算机英语,计算机的英语词汇
  6. lda 可以处理中文_用python处理文本数据
  7. LongCache机制与Long等值比较\\\\Integer 中的缓存类IntegerCache
  8. Java单例模式优化写法
  9. hdu 4497 GCD and LCM
  10. 为什么不要使用长事务