Почему JOptionPane мешает моей строке? - PullRequest
1 голос
/ 07 сентября 2011

У меня есть строка кода, подобная следующей:

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

Ответы [ 3 ]

1 голос
/ 07 сентября 2011

Ошибка должна быть где-то еще в вашем коде.

Я просто запустил следующий код:

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: \ некоторую папку на моем компьютере \ Hot Dog.txt и C: \ некоторую папку на моем компьютере \ Pizza.txt.

0 голосов
/ 13 сентября 2011

Некоторые предположения Глассбола:

Вывод .txtsers\userName\AppData\Roaming\Pizza выглядит как возврат каретки в вашей строке (до .txt).Вы можете воспроизвести это с помощью этого кода:

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

Вопрос заключается в том, как этот возврат каретки попал в вашу строку.Очевидно, что код, который вы показали в вопросе, не дает его.

Создайте короткий самодостаточный компилируемый пример (SSCCE) , и вы либо найдете причину,или мы можем показать вам, когда вы разместите это здесь (добавьте это к вопросу).

0 голосов
/ 09 сентября 2011

Ваш код даже не компилируется, потому что ожидает объект [].попробуйте новую строку [] {"Pizza", "Hot Dog"} вместо просто {"Pizza", "Hot Dog"}

...