我不是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 –