JavaVM Windows 7 64位 - JFileChooser()未显示对话框

时间:2010-11-12 02:51:06

标签: java windows-7 64-bit jfilechooser

我正在尝试创建一个基于控制台的简单java应用程序,它要求用户从本地文件系统中选择文件。

控制台提示用户选择一个可用选项,然后打开给定的输入。

public Client() throws UnknownHostException, IOException {
    printuseroptions();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    char userdecision = br.readLine().charAt(0);

    System.out.println(userdecision);

    switch(userdecision){
        case '1':
            System.out.println("Which file would you like to open?");
            openfile(br.readLine());
            break;
        case '2':
            System.out.println("Which file would you like to close?");
            closefile(br.readLine());
            break;
        }

private boolean openfile(String path){
    System.out.println("openfile("+path+")");
    return false;
}

private boolean closefile(String path){
    System.out.println("closefile("+path+")");
    new JFileChooser().showOpenDialog(null);
    return false;
}

无论我做什么,JFileChooser弹出框都不会打开。控制台上未显示任何错误,但调试步骤显示以下错误:

  

块引用   线程[主要](暂停)
      ClassNotFoundException(Throwable)。(String,Throwable)行:217
      ClassNotFoundException(Exception)。(String,Throwable)行:不可用       ClassNotFoundException。(String)line:not available
      URLClassLoader $ 1.run()行:不可用
      AccessController.doPrivileged(PrivilegedExceptionAction,AccessControlContext)行:不可用[本机方法]
      Launcher $ ExtClassLoader(URLClassLoader).findClass(String)行:不可用
      Launcher $ ExtClassLoader.findClass(String)行:不可用
      Launcher $ ExtClassLoader(ClassLoader).loadClass(String,boolean)行:不可用       Launcher $ AppClassLoader(ClassLoader).loadClass(String,boolean)行:不可用       Launcher $ AppClassLoader.loadClass(String,boolean)line:not available
      Launcher $ AppClassLoader(ClassLoader).loadClass(String)行:不可用
      ResourceBundle $ RBClassLoader.loadClass(String)行:不可用
      CoreResourceBundleControl(ResourceBundle $ Control).newBundle(String,Locale,String,ClassLoader,boolean)行:不可用
      ResourceBundle.loadBundle(CacheKey,List,Control,boolean)行:不可用       ResourceBundle.findBundle(CacheKey,List,List,int,Control,ResourceBundle)行:不可用
      ResourceBundle.getBundleImpl(String,Locale,ClassLoader,ResourceBundle $ Control)行:不可用
      ResourceBundle.getBundle(String,ResourceBundle $ Control)行:不可用
      Toolkit $ 3.run()行:不可用       AccessController.doPrivileged(PrivilegedAction)行:不可用[native method]
      工具包。()行:不可用       组件。()行:不可用
      Client.closefile()行:90       客户。()行:60
      Client.main(String [])行:36

相同的代码在Linux 32位机器上运行完美,所以我怀疑问题与Windows有关。

以下代码在Windows和Linux上按预期运行,因此我怀疑可能是由于在Windows与Linux(CR LF)中处理控制台输入时的不同方式。

import javax.swing.JFileChooser;

public class Example {
    public static void main(String[] args) {
        new JFileChooser().showOpenDialog(null);
    }
}

由于

1 个答案:

答案 0 :(得分:1)

看起来你和我一样新。 ;)让我们看看我是否可以提供帮助。

我对您的代码进行了更改以使其编译,并在Windows Server 2003 x64计算机上运行,​​并且没有看到任何问题 - 文件选择器对话框打开。

我建议你做两件事来消除其他可能性:

1)确保系统的原生外观和感觉设定。设置你的外观&在程序启动时使用此功能感觉系统默认:UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

2)确保只在Event Dispatch Thread(EDT)中构造并打开JFileChooserDialog和所有其他Swing组件。如果你知道当前线程是主线程或其他一些工作线程(我认为这是因为你正在接受控制台输入),你需要调用SwingUtilities.invokeLater(Runnable)来正确执行。

祝你好运。