Tôi hiện đang thử nghiệm với chức năng kéo thả & sử dụng Java 7 Update 21.Java 7: Cách triển khai kéo và thả trong Java?
hệ điều hành mục tiêu của tôi là:
- Windows 7
- Ubuntu 12.04
- Mac OSX 10,6/10,8
Yêu cầu là:
kéo tập tin từ hệ thống tập tin và thả nó vào ứng dụng Java của tôi (thực hiện một bản sao của tập tin vào một thư mục tạm thời) -> làm việc cho Linux & MacOSX & của Windows
kéo e-mail từ Thunderbird và thả chúng vào ứng dụng Java của tôi (tiết kiệm chúng như hoàn chỉnh * .eml trên hệ thống tập tin)
các mã sau đây làm việc với tập tin đơn giản giảm xuống ứng dụng của tôi dành cho Windows, MacOSX và Ubuntu. Một yêu cầu nữa là để thả e-mail từ Thunderbird sang ứng dụng Java của tôi (thư được tự động chuyển thành tệp * .eml và được lưu trữ vào đĩa). Điều này cũng hoạt động tốt cho Windows nhưng tôi nhận được "Dữ liệu Hương vị không được hỗ trợ ngoại lệ" trong Ubuntu và MacOSX ...
EDIT: Tôi đã thử với OpenJDK 7 trên Ubuntu, nhưng với điều đó 't làm việc. Chỉ với phiên bản JDK của Oracle.
Có ai đó có ý tưởng cách khắc phục/đạt được điều đó không?
Rất cám ơn trước!
Đây là một mẫu executeable đơn giản:
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, 200, Short.MAX_VALUE)
);
pack();
}
public static void main(String args[]) {
new DragDropTest().setVisible(true);
}
}
đi thêm một bước nữa in hương vị bạn nhận được và cố gắng để thao tác nó, có thể lưu tất cả để tập tin và sau đó xem những gì là .eml mặc dù tôi nghi ngờ chỉ có một sẽ được thiết lập. nếu bạn không nhận được bất cứ điều gì có thể sử dụng có thể là một vấn đề với thunderbird cho * nix – tgkprog