我正在尝试创建一个基于控制台的简单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);
}
}
由于
答案 0 :(得分:1)
看起来你和我一样新。 ;)让我们看看我是否可以提供帮助。
我对您的代码进行了更改以使其编译,并在Windows Server 2003 x64计算机上运行,并且没有看到任何问题 - 文件选择器对话框打开。
我建议你做两件事来消除其他可能性:
1)确保系统的原生外观和感觉设定。设置你的外观&在程序启动时使用此功能感觉系统默认:UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
2)确保只在Event Dispatch Thread(EDT)中构造并打开JFileChooserDialog
和所有其他Swing组件。如果你知道当前线程是主线程或其他一些工作线程(我认为这是因为你正在接受控制台输入),你需要调用SwingUtilities.invokeLater(Runnable)
来正确执行。
祝你好运。