我不是SWT用户,但我需要它在JApplet中的功能之一我正在处理:FileDialog。当我用浏览器运行小程序时,我遇到了问题:对话框不会弹出,不会抛出异常,也不会发生任何(但闪烁的窗口)。在Applet中的SWT FileDialog不显示
Applet仅适用于Windows用户,这是要求。
当我在Eclipse中从appletviewer运行相同的applet时,它工作正常。
我将所有SWT库添加到Windows中的PATH中,因此它们应该可用于VM。我在互联网上搜索,但我找不到任何可以帮助我的东西。
我使用的代码:
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的。
我使用SWT 3.7.1在Windows 7上工作。所有的DLL都在java.library.path中(窗口中的%PATH%)
你有什么建议吗?
顺便说一句:与本机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);
}
});
}
}
}
可以为用户提供与反应的按钮可运行Applet的例子对话框打开? – Sorceror
http://www.eclipse.org/swt/jws/controlexample.jnlp –