1

次のようなコード行があります。

final String food = 
    (String) JOptionPane.showInputDialog(this, "Choose a food", "Food",
                                         JOptionPane.QUESTION_MESSAGE, null,
                                         {"Pizza", "Hot Dog"}, "Pizza");

変数を使用するfoodと、文字列の一部が取得されますが、表示されない他の文字も取得されます。何が起こっているのかわかりません。誰かが私を助けることができますか?

問題を再現するには:

System.out.println(System.getenv("APPDATA") + File.separator + food + ".txt");

次のようなものを出力することになっています。

C:\Users\userName\AppData\Roaming\Pizza.txt

しかし、実際には次の出力が得られます。

.txtsers\userName\AppData\Roaming\Pizza
4

3 に答える 3

0

エラーは、コード内の別の場所にある必要があります。

次のコードを実行しました。

String[] options = {"Pizza", "Hot Dog"};

final String food = (String) JOptionPane.showInputDialog(null, "Choose a food", "Food", JOptionPane.QUESTION_MESSAGE, null, options, "Pizza");

System.out.println("'" + food + "'");

ピザを選択すると、コンソールにピザが表示されました。ホットドッグを選ぶとホットドッグが出てきまし

コードの他の部分について。私はちょうど走った:

String[] options = {"Pizza", "Hot Dog"};

final String food = (String) JOptionPane.showInputDialog(null, "Choose a food", "Food", JOptionPane.QUESTION_MESSAGE, null, options, "Pizza");

StringBuilder sb = new StringBuilder();
sb.append(System.getenv("APPDATA"));
sb.append(File.separator);
sb.append(food);
sb.append(".txt");
System.out.println(sb.toString());

C:\some folder at my computer\Hot Dog.txtと C :\some folder at my computer\Pizza.txt を取得しました。

于 2011-09-06T21:17:45.527 に答える
0

Object[] を想定しているため、コードはコンパイルさえしません。{"Pizza", "Hot Dog"} ではなく、新しい String[] {"Pizza", "Hot Dog"} を試してください

于 2011-09-09T12:28:28.240 に答える
0

いくつかのグラスボールの推測:

の出力は.txtsers\userName\AppData\Roaming\Pizza、文字列にキャリッジ リターンがあったようです (の前.txt)。これは、次のコードで再現できます。

System.out.println("C:\\users\\userName\\AppData\\Roaming\\Pizza\r.txt");

問題は、このキャリッジ リターンが文字列にどのように組み込まれたかです。明らかに、質問で示したコードはそれを生成しません。

短い自己完結型のコンパイル可能な例 (SSCCE)を作成すると、途中で理由が見つかるか、ここに投稿する (質問に追加する) ときに表示できます。

于 2011-09-12T23:53:48.007 に答える