Перетаскивание не работает на Mac - PullRequest
11 голосов
/ 22 декабря 2010

Я пытаюсь сделать возможным перетаскивание файлов из Finder в мое приложение SWT.В Windows и Ubuntu работает следующий фрагмент кода:

public class DndTest {

    public static void main(final String[] args) {
        final Display display = new Display();
        final Shell shell = new Shell(display, SWT.DIALOG_TRIM);
        shell.setText("Drag & drop test");
        shell.setSize(200, 200);
        final FormLayout layout = new FormLayout();
        shell.setLayout(layout);
        final Label lbl = new Label(shell, SWT.NORMAL);
        lbl.setAlignment(SWT.CENTER);
        lbl.setText("Drop files here");
        final FormData layoutData = new FormData();
        layoutData.left = new FormAttachment(50, -100);
        layoutData.top = new FormAttachment(50, -15);
        layoutData.right = new FormAttachment(50, 100);
        layoutData.bottom = new FormAttachment(50, 15);
        lbl.setLayoutData(layoutData);

        final DropTarget dt = new DropTarget(shell,
                DND.DROP_DEFAULT | DND.DROP_MOVE);
        final FileTransfer fileTransfer = FileTransfer.getInstance();
        dt.setTransfer(new Transfer[] { fileTransfer });
        dt.addDropListener(new DropTargetAdapter() {
            @Override
            public void drop(final DropTargetEvent event) {
                System.out.println(event);
                String fileList[] = null;
                final FileTransfer ft = FileTransfer.getInstance();
                if (ft.isSupportedType(event.currentDataType)) {
                    fileList = (String[]) event.data;
                }
                for (final String file : fileList) {
                    System.out.println("- " + file);
                }
            }
        });

        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose();

    }

}

У меня складывается впечатление, что мое приложение не регистрируется в качестве цели перетаскивания на Mac, поскольку при наведении на него файлов не выпадаеткурсор.

Я использую последний SWT 3.5 (я не могу использовать 3.6, потому что для совместимости мне нужно придерживаться Carbon & Java 1.5).

Есть идеи, что здесь не так?

Редактировать : я изменил код, чтобы он стал полностью приложенным примером.Он печатает пропущенные имена файлов на консоли в Windows и Ubuntu, но ничего не делает на Mac.

Ответы [ 2 ]

2 голосов
/ 20 января 2011

Так как у вас есть линия

dt.addDropListener(new DropTargetAdapter() {

это может означать наличие ошибки для разработки приложений Java SWT в Mac OS X (возможно, исправлено в более поздней версии?)

проверьте связанный с этим вопрос переполнения стека, сформулированный иначе @ здесь

и, возможно, именно ваша проблема уже отправлена ​​как запрос функции ошибки.

0 голосов
/ 02 апреля 2012

Это ошибка в SWT ( проблема # 267381 связана, но не может быть реальной проблемой).

Как отметил Майк Л. в комментарии, это было исправлено в SWT 3.7M4.

...