我制作了一个简单的文本框,按下按钮时会加载文本文件中的文本(逐行)。它将数字写入JTextArea然后它将一些方法应用于数字并将结果输出到JTextArea。
我的问题是,当显示输出时,它会重复这些行 - 通过示例更容易显示。
所以如果文本文件是:
1
2
给出的输出是:
First TextArea:
1
2
Second TextArea:
resultFrom1
resultFrom1
resultFrom2
因此数字显示正常,但处理后的数据正在重复。在这种情况下,它显示程序显示第一个结果,然后显示两个结果。
加载按钮的代码是:
private void loadPlaylistBtnActionPerformed(java.awt.event.ActionEvent evt) {
if (evt.getSource() == loadPlaylistBtn) {
try {
playlistTextArea.setText(null);
FileReader fileReader = new FileReader("playlist.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
String inputFile = "";
String textFieldReadable = bufferedReader.readLine();
while (textFieldReadable != null) {
inputFile += textFieldReadable + "\n";
textFieldReadable = bufferedReader.readLine();
trackNum.setText(inputFile);
String[] loadPlaylist = trackNum.getText().split("\\n");
for (int i = 0; i < loadPlaylist.length; ++i) {
String songName = LibraryData.getName(loadPlaylist[i]);
String songArtist = LibraryData.getArtist(loadPlaylist[i]);
playlistTextArea.append(songName + " - " + songArtist + "\n");
}
}
fileReader.close();
} catch (Exception e) {
System.out.println("File not found.");
}
}
}
LibraryData中的方法是:
的getName:
public static String getName(String key) {
try {
stmt = con.createStatement();
ResultSet res = stmt.executeQuery("SELECT * FROM Library WHERE LibraryID = '" +
key + "'");
if (res.next()) {
return res.getString(2);
} else {
return null;
}
} catch (Exception e) {
return null;
}
}
和getArtist:
public static String getArtist(String key) {
try {
stmt = con.createStatement();
ResultSet res = stmt.executeQuery("SELECT * FROM Library WHERE LibraryID = '" + key + "'");
if (res.next()) {
return res.getString(3);
} else {
return null;
}
} catch (Exception e) {
return null;
}
}
关于我如何能够输出与数字相关的一首歌而不是重复自己的任何想法?
很抱歉,如果真的不清楚 - 我还是Java的新手。
谢谢:)
答案 0 :(得分:0)
假设playlistTextArea是你的问题测试盒,问题似乎是:
playlistTextArea.append(songName + " - " + songArtist + "\n");
您一次只读取一个文件行,然后每次都附加整个列表,这将导致模式1,1,2,1,2,3,1,2,3解决这个问题的最简单方法是确保在for循环之前清除文本框(即 - 移动到playlistTextArea.setText(null))。