Java 在导出的Eclipse RCP exe中,SWT拖放在Windows 10上不起作用
我在EclipseRCPGUI插件项目中使用拖放已经有好几年了,最近升级到了Windows10Home。我有一个小部件,它使用以下代码将自己设置为文件放置侦听器:Java 在导出的Eclipse RCP exe中,SWT拖放在Windows 10上不起作用,java,drag-and-drop,swt,eclipse-rcp,Java,Drag And Drop,Swt,Eclipse Rcp,我在EclipseRCPGUI插件项目中使用拖放已经有好几年了,最近升级到了Windows10Home。我有一个小部件,它使用以下代码将自己设置为文件放置侦听器: Transfer[] transfers = new Transfer[] { FileTransfer.getInstance() }; int ops = DND.DROP_COPY | DND.DROP_MOVE; DropTarget target = new DropTarget(this, ops)
Transfer[] transfers = new Transfer[] { FileTransfer.getInstance() };
int ops = DND.DROP_COPY | DND.DROP_MOVE;
DropTarget target = new DropTarget(this, ops);
target.setTransfer(transfers);
target.addDropListener(new DropTargetAdapter() {
@Override
public void drop(DropTargetEvent event) {
if (event.data instanceof String[]) {
List<File> files = new ArrayList<>();
String[] paths = (String[]) event.data;
for (String path : paths) {
File file = new File(path);
if (file.isDirectory()) {
Iterator<File> recursive = FileUtils.iterateFiles(file, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
while (recursive.hasNext()) {
files.add(recursive.next());
}
} else {
files.add(file);
}
}
notifyListeners(files);
}
}
@Override
public void dragEnter(final DropTargetEvent event)
{
log.error(event.detail+"");
event.detail = DND.DROP_COPY;
}
});
Transfer[]transfers=new Transfer[]{FileTransfer.getInstance()};
int ops=DND.DROP_COPY | DND.DROP_MOVE;
DropTarget target=新的DropTarget(这是ops);
target.setTransfer(传输);
addDropListener(新的DropTargetAdapter(){
@凌驾
公共作废删除(DropTargetEvent事件){
if(字符串[]的event.data实例){
列表文件=新的ArrayList();
字符串[]路径=(字符串[])event.data;
用于(字符串路径:路径){
文件=新文件(路径);
if(file.isDirectory()){
迭代器递归=FileUtils.iterateFiles(文件,TrueFileFilter.INSTANCE,TrueFileFilter.INSTANCE);
while(recursive.hasNext()){
add(recursive.next());
}
}否则{
文件。添加(文件);
}
}
通知侦听器(文件);
}
}
@凌驾
公共无效dragEnter(最终DropTargetEvent事件)
{
log.error(event.detail+“”);
event.detail=DND.DROP\u COPY;
}
});
现在,在我新的Win10环境中,当我从Eclipse(我的开发环境)运行应用程序时,DnD工作,日志get显示我的测试错误消息。当我使用导出产品向导并运行生成的exe时,DnD不起作用,我得到的是光标,它显示我无法将文件放到我的小部件上,并且从dragEnter方法写入日志时没有错误
我要做的唯一一件事是,如果我在Windows7 PC上运行导出,它就可以工作,但在Win 10上没有,如果这可能是原因的话 我可以使用非常类似的代码在Windows10Pro系统上成功地删除RCP应用程序中的文件传输。一个区别是我们的DropTargetAdapter扩展还实现了TransferDropTargetListener。不知道这是否重要。您是否尝试过在Windows 10系统上的调试器中单步执行代码?你的
drop()
方法输入了吗?当我从eclipse中运行它时,它会工作,只有当我导出到exe时,它才会工作。哦,对了,对不起,你这么说了。在这些不寻常的情况下,添加一些临时调试打印或日志消息,以显示代码在开发环境之外运行时所取得的进展,这是非常有用的。如果你在写日志消息,一定要写一个通过任何日志约束的消息类型。是的,我也这么做过。drop()没有被调用,我也不希望被调用,因为光标显示drop无效。dragEnter方法也没有被调用,所以这就好像在进入我的代码之前SWT中发生了一些事情,我不知道如何开始跟踪它。您解决了问题吗?原因是什么?