Я не пользователь SWT, но мне нужна одна из его функций в JApplet, над которым я работаю: FileDialog.И у меня проблема, когда я запускаю апплет без браузера: диалоговое окно не всплывает, никаких исключений не выдается, ничего (кроме мигания окна) не происходит.
Апплет только для пользователей Windows, это требование.
Когда я запускаю тот же апплет из appletviewer в Eclipse, он работает нормально.
Я добавил все библиотеки SWT в PATH в Windows, чтобы они были доступны для ВМ.Я искал по Интернету, но не смог найти ничего, что могло бы мне помочь.
Код, который я использую:
final Display display = new Display();
final java.awt.Canvas awtParent = new java.awt.Canvas();
applet.getApplet().add(awtParent);
final Shell swtParent = SWT_AWT.new_Shell(display, awtParent);
try {
FileDialog dialog = new FileDialog(swtParent, SWT.OPEN);
dialog.setFilterExtensions(getMediaFilesExtensions());
dialog.setFilterNames(new String[] {"All files", "Media Files"});
String fileName = dialog.open();
File[] files = null;
if (fileName != null) {
files = new File[] { new File(dialog.getFileName()) };
}
return files;
} finally {
display.syncExec(new Runnable () {
public void run () {
if (swtParent != null && !swtParent.isDisposed ()) swtParent.dispose ();
display.dispose ();
applet.getApplet().remove(awtParent);
}
});
}
Этот код вызывается, когда пользователь нажимает кнопку.Остальная часть приложения основана на Swing.
Я работаю на Windows 7 с SWT 3.7.1.Все библиотеки DLL находятся в java.library.path (% PATH% в Windows)
Есть ли у вас какие-либо рекомендации?
Кстати: качание с собственным L & F не вариант.Мне нужен собственный диалог выбора файла.
Это запущенный демонстрационный апплет, который я создал.Требуется: swt-win32-x86-3.7.jar.
package com.applet;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.Arrays;
import javax.swing.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.widgets.*;
public class DemoApplet extends JApplet {
@Override
public void init() {
JPanel mainPanel = new JPanel();
JButton button = new JButton(new AbstractAction("Select files") {
@Override
public void actionPerformed(ActionEvent e) {
File[] filesNative = getFilesNative();
String msg = "Selected files: " + Arrays.toString(filesNative);
JOptionPane.showMessageDialog(null, msg);
}
});
mainPanel.add(button, BorderLayout.CENTER);
add(mainPanel);
super.init();
}
private File[] getFilesNative() {
final Display display = new Display();
final java.awt.Canvas awtParent = new java.awt.Canvas();
add(awtParent);
final Shell swtParent = SWT_AWT.new_Shell(display, awtParent);
try {
FileDialog dialog = new FileDialog(swtParent, SWT.OPEN);
dialog.setFilterNames(new String[] {"All files", "Media Files"});
String fileName = dialog.open();
File[] files = null;
if (fileName != null) {
files = new File[] { new File(dialog.getFileName()) };
}
return files;
} finally {
display.syncExec(new Runnable () {
public void run () {
if (swtParent != null && !swtParent.isDisposed ()) swtParent.dispose ();
display.dispose ();
remove(awtParent);
}
});
}
}
}