私はSWTユーザーではありませんが、私が取り組んでいるJAppletの機能の1つが必要です:FileDialog。そして、ブラウザを使ってアプレットを実行すると問題が発生します。ダイアログはポップアップされず、例外もスローされず、何も表示されません(ウィンドウの点滅)。アプレット内のSWT FileDialogが表示されません
アプレットはWindowsユーザーのみの要件です。
Eclipseのアプレットビューアから同じアプレットを実行すると、正常に動作します。
すべての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にあります(Windowsでは%PATH%)
あなたはアドバイスをお持ちですか?
BTW:ネイティブのスイング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);
}
});
}
}
}
私のためにSWTのアプリで開いていないファイルダイアログの問題は、あなたと反応するボタンで実行可能なアプレットの例を提供することができ、固定しましたダイアログが開きますか? – Sorceror
http://www.eclipse.org/swt/jws/controlexample.jnlp –