В приведенном ниже коде используется метод, называемый displayClassSet(). Я поместил его в do/while, чтобы воссоздать ошибку, которую JFileChooser не закрывает. Когда do/while не существует, он работает нормально. В исходном коде (более 700 строк) он переходит к этому методу с помощью переключателя. Таким образом, пользователь выбирает параметр, который выполняет displayClassSet(). Как только это будет сделано, он вернется в меню. На данный момент JFileChooser остается открытым и не разрешает никаких новых вариантов меню. Надеюсь, я достаточно ясен. Я думал, что это будет лучше, чем пытаться сбросить огромный файл здесь. В приведенном ниже примере кода, если вы выберете «n» после того, как вы вернетесь, он зависает. Если вы выберете «y», он закрывается, но, опять же, пользователь не может быть выполнен в исходном коде. Они не могут из-за проблемы с подвеской, о которой я упоминал. Я также включил образец файла TXT, который он должен открыть.Почему JFileChooser не подходит?
Я пробовал: bufRdr.close();
и in.close();
. Я также прочитал несколько веб-сайтов на JFileChooser.
Вы видите, что я делаю неправильно?
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import java.util.StringTokenizer;
import javax.swing.JFileChooser;
public class TestingArrays {
public static void main(String[] args) throws IOException {
boolean done = false;
Scanner console = new Scanner(System.in);
do {
displayClassSet();
done = getYNConfirm(console, "Done?");
} while (!done);
}
public static Boolean getYNConfirm(Scanner pipe, String prompt)
{
Boolean result = false;
String input = "";
String trash = "";
do {
System.out.print(prompt + " [y/n] ");
if (pipe.hasNextDouble()) {
trash = pipe.nextLine();
System.out.println("Error: You entered \"" + trash + "\", Try again.");
} else {
input = pipe.nextLine();
if (input.equalsIgnoreCase("y")) {
result = true;
} else if (input.equalsIgnoreCase("n")) {
result = false;
}
}
} while (!input.equalsIgnoreCase("y") && !input.equalsIgnoreCase("n"));
return result;
}
static void displayClassSet() throws IOException
{
File classFile = new File("/");
int row = 0;
int col = 0;
//int columnLength = 0;
//Scanner inFile;
int lineCount = 0;
int wordCount = 0;
int charCount = 0;
int countColumns = 0;
int maxLineLength = 0;
int sum = 0;
int high = 0;
int low = 100;
String line;
Scanner in;
JFileChooser chooser = new JFileChooser();
try {
if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
classFile = chooser.getSelectedFile();
in = new Scanner(classFile);
while (in.hasNextLine()) {
line = in.nextLine();
lineCount++; // Same as lineCount = lineCount + 1;
charCount += line.length();
wordCount += countWords(line);
countColumns += countColumns(line);
int columnOneWidth = 25;
int gradeColumnWidth = 10;
maxLineLength = columnOneWidth + (((countColumns/lineCount + 2)) * gradeColumnWidth);
}
String[][] data = new String[lineCount][countColumns/lineCount];
BufferedReader bufRdr = new BufferedReader(new FileReader(classFile));
//read each line of text file
while ((line = bufRdr.readLine()) != null && row < lineCount) {
StringTokenizer st = new StringTokenizer(line, ",");
while (st.hasMoreTokens()) {
//get next token and store it in the array
data[row][col] = st.nextToken();
col++;
}
col = 0;
row++;
}
bufRdr.close();
in.close();
// CODE REMOVED - SIMPLE FOR LOOPS TO DISPLAY INFORMATION
System.out.println("display stuff here...");
} else {
System.out.println("You must choose a file.\nReturn to the menu.");
return;
}
} catch (FileNotFoundException ex) {
System.out.println("Error: Could not open class file!");
System.exit(0);
} catch (IOException ex) {
ex.getStackTrace();
System.out.println("IO ERROR trying to read file!");
return;
}
}
static int countWords(String in) {
String trim = in.trim();
if (trim.isEmpty()) {
return 0;
}
return trim.split("\\s+").length; //separate string around spaces
}
static int countColumns(String in) {
String trim = in.trim();
if (trim.isEmpty()) {
return 0;
}
return trim.split(",").length; //separate string around spaces
}
}
текстовый файл содержит:
2nd Grade Pyromancy, Lab01, Quiz01, Test01
Ferrel Quinn, 75, 70, 80
Billy Brago, 70, 80, 90
Sally Simpson, 50, 60, 60
Django Rude, 100, 90, 90
Можете ли вы сделать код немного короче? См. [Минимальные, завершенные и проверенные примеры] (http://stackoverflow.com/help/mcve) – FlyingPiMonster
Я сделал это как можно короче, чем здесь. displayClassSet() - фокус. Остальное поддерживает воспроизведение ошибки. – Dann