Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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 在导出的Eclipse RCP exe中,SWT拖放在Windows 10上不起作用_Java_Drag And Drop_Swt_Eclipse Rcp - Fatal编程技术网

Java 在导出的Eclipse RCP exe中,SWT拖放在Windows 10上不起作用

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)

我在EclipseRCPGUI插件项目中使用拖放已经有好几年了,最近升级到了Windows10Home。我有一个小部件,它使用以下代码将自己设置为文件放置侦听器:

    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中发生了一些事情,我不知道如何开始跟踪它。您解决了问题吗?原因是什么?