我試圖用Java中的本地Windows文件對話框,使用JNA調用COMDLG32功能GetOpenFileName
。我做了一個靜態方法,OpenFileDialog.display
看起來像這樣:調用GetOpenFileName失敗的Swing應用程序
public static List<File> display(Window parent, boolean allowMultiSelect)
它應該返回選定的文件,或NULL,如果用戶取消了對話框。
我有兩個簡單的測試程序。這一個按預期方式工作:
package nativedialogs;
import java.io.File;
import java.util.List;
public class SimpleTest {
public static void main(String[] args) {
List<File> files = OpenFileDialog.display(null, true);
System.out.println(files);
}
}
這其中,然而,並不:
package nativedialogs;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class SwingTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button = new JButton("Open file dialog");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
List<File> files = OpenFileDialog.display(f, true);
// These also fail:
// List<File> files = OpenFileDialog.display(f, false);
// List<File> files = OpenFileDialog.display(null, true);
// List<File> files = OpenFileDialog.display(null, false);
System.out.println(files);
}
});
f.add(button);
f.pack();
f.setVisible(true);
}
});
}
}
對於後者例如,CommDlgExtendedError
返回2,其according to MSDN是:
CDERR_INITIALIZATION 0×0002
初始化過程中常見的對話框功能失敗。當有足夠的內存不可用時,通常會發生此錯誤。
...這並不能真正幫助我的所有的東西。我在這裏做錯了什麼?
我穿上引擎收錄的其他來源,所以我不會弄亂的問題太多:
OpenFileDialog
:http://pastebin.com/HDmu0TjX
ComDlg32JNA
:http://pastebin.com/X5F5LLip
這可能是贓物,但如果你清楚你的ByteBuffer使用它通過調用'緩衝區之前。明確();?' –
這並沒有什麼差別,遺憾的是 – perp