ユーザーがローカルファイルシステムからファイルを選択する必要がある単純なコンソールベースの Java アプリケーションを作成しようとしています。
コンソールは、利用可能なオプションの 1 つを選択するようにユーザーに促し、指定された入力をオンにします。
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 ポップアップ ボックスが開きません。コンソールにエラーは表示されませんが、デバッグのステップスルーで次のエラーが表示されます。
Blockquote Thread [main] (Suspended)
ClassNotFoundException(Throwable).(String, Throwable) 行: 217
ClassNotFoundException(Exception).(String, Throwable) 行: 利用不可 ClassNotFoundException.(String) 行: 利用不可
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) 行: 利用不可
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) 行:利用不可 [ネイティブメソッド]
Toolkit.() 行: 利用不可
Component.() 行: 利用不可
Client.closefile() 行: 90 Client.() 行: 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);
}
}
ありがとう