我有一个使用JFileChooser
的swing应用程序。当我从文件菜单中单击打开菜单项时,它应显示文件对话框,用户可以在其中选择文件。
此应用程序在我的计算机上运行但在另一台计算机上遇到问题。文件对话框未显示,堆栈跟踪显示NullPointerException
JFileChooser
我的机器是64位Windows 7,而另一台机器是Windows 7 32位。两台机器都使用java 1.6
要验证它是否因为32位,我尝试在另一台Windows 7 32位并且相同的应用程序正在运行。
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
public class FileChooserTester{
public Boolean loadMDBFile() {
JFileChooser fc = new JFileChooser();
FileNameExtensionFilter fileExtensionFilter = new FileNameExtensionFilter(
"*.mdb", "mdb");
fc.addChoosableFileFilter(fileExtensionFilter);
fc.setDialogTitle("Open");
int returnVal = fc.showOpenDialog(null);
if (returnVal != JFileChooser.APPROVE_OPTION) {
return null;
} else {
try {
// process file
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}
public static void main(String[] args) {
new FileChooserTester().loadMDBFile();
}

下面是堆栈跟踪。
ERROR actions.menu.File_Open - Error occured while opening an existing timetable. null
caused by null java.lang.NullPointerException
at javax.swing.ImageIcon.<init><ImageIcon.java:215>
at javax.swing.ImageIcon.<init><ImageIcon.java:201>
at sun.swing.WindowPlaceBar.<init><WindowPlaceBar.java:94>
at com.sun.java.swing.plaf.windows.WindowFileChooserUI.updateUseShellFolder<WindowsFileChooserUI.java:542>
at com.sun.java.swing.plaf.windows.WindowFileChooserUI.installComponents<WindowsFileChooserUI.java:542>
at com.sun.java.swing.plaf.windows.WindowFileChooserUI.installComponents<WindowsFileChooserUI.java:219>
at java.swing.plaf.basic.basicFileChooserUI.installUI<BasicFileChooserUI.java:145>
at com.sun.java.swing.plaf.windows.WindowFileChooserUI.installUI<WindowsFileChooserUI.java:152>
at javax.swing.JComponent.setUI<JComponent.java:681>
at javax.swing.JFileChooser.updateUI<JFileChooser.java:1774>
at javax.swing.JFileChooser.setup<JFileChooser.java:371>
at javax.swing.JFileChooser.<init><JFileChooser.java:344>
at javax.swing.JFileChooser.<init><JFileChooser.java:297>
at actions.menu.File_Open.loadMDBFile<File_Open.java:221>
提前谢谢。
答案 0 :(得分:0)
您的问题很可能是由此部分代码引起的:
if (returnVal != JFileChooser.APPROVE_OPTION) {
return null;
}
取消按钮或&#39; X&#39;被压了。如果您选择一个文件并按&#34;打开&#34;按钮,文件应该正常处理。
我的建议是将方法的返回类型更改为原始布尔值,并返回false而不是null。
更新:这是我用来测试的代码的转换版本(故障排除)
public static void main(String[] args)
{
JFileChooser fc = new JFileChooser();
FileNameExtensionFilter fileExtensionFilter = new FileNameExtensionFilter(
"*.mdb", "mdb");
fc.addChoosableFileFilter(fileExtensionFilter);
fc.setDialogTitle("Open");
int returnVal = fc.showOpenDialog(null);
if (returnVal != JFileChooser.APPROVE_OPTION) {
System.out.println("I am returning null!");
System.exit(1);
} else {
try {
System.out.println("Doing something");
} catch (Exception e) {
e.printStackTrace();
System.out.println("I am returning false");
System.exit(-1);
}
System.out.println("I am returning true");
System.exit(0);
}
}