Первая проблема, с которой я сталкиваюсь - это достигнуть размера моего списка, в MainWindow, когда я вызываю свой класс getResult (). Size (), он равен нулю, даже если он увеличивается в классе filesearch (если вы распечатываете его)во время поиска).
Во-вторых, мне нужна помощь, чтобы заставить двух рабочих-качателей общаться между двумя классами.В одном классе он ищет файлы, а в MainWindow движется индикатор выполнения.
Я обнаружил, что мне нужно что-то сделать с SwingPropertyChangeSupport, но я не смог его реализовать.
Я попытался создать два свинг-работника в каждом классе, один для вывода в MainWindow, а другой для поиска (расширение класса FileSearch)
И поскольку я рекурсивно ищу файлы, я не уверен, что это правильный путьчтобы сделать это
if (temp.isDirectory()) {
new FileSearch(getFileNameToSearch(),temp).execute();
}
эта вещь ^
public class FileSearch extends SwingWorker<Integer, String> {
private String fileNameToSearch;
private List<String> result;
private File file;
public FileSearch(String fileNameToSearch, File file) {
this.fileNameToSearch = fileNameToSearch;
this.file = file;
result = new ArrayList<>();
}
public String getFileNameToSearch() {
return fileNameToSearch;
}
public List<String> getResult() {
return result;
}
@Override
protected Integer doInBackground() throws Exception {
if (file.isDirectory()) {
System.out.println("Searching directory ... " + file.getAbsoluteFile());
if (file.canRead()) {
try{
for (File temp : file.listFiles()) {
if (temp.isDirectory()) {
new FileSearch(getFileNameToSearch(),temp).execute();
} else {
String temp2 = temp.getName().toLowerCase();
String trimmedName = temp.getName().toLowerCase();
try{
trimmedName = temp2.substring(0, temp2.lastIndexOf("."));
}catch(StringIndexOutOfBoundsException e){
}
if (getFileNameToSearch().equals(trimmedName)) {
result.add(temp.getAbsoluteFile().toString());
System.out.println(result.size());
}else{
System.out.println(getFileNameToSearch() + "!= " + trimmedName);
}
}
}
}catch(NullPointerException e){
}
} else {
System.out.println(file.getAbsoluteFile() + "Permission Denied");
}
}
return result.size();
}
и MainWindow
public class MainWindow extends JFrame {
public MainWindow() {
initComponents();
fileChooser1.setApproveButtonText("Select");
fileChooser1.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
directoriesTextArea.setEditable(false);
}
private void startButtonMouseClicked(MouseEvent e) {
directoriesTextArea.setText("");
SwingWorker<Void, String> worker = new SwingWorker<>(){
@Override
protected Void doInBackground() throws Exception {
File file = new File(absolutePathTextField.getText());
FileSearch filesearch = new FileSearch(fileNameTextField.getText(), file);
filesearch.execute();
int count = filesearch.getResult().size();
if(count == 0){
JOptionPane.showMessageDialog(new JFrame(), "There are no such files");
System.out.println(count);
}else{
for(String matched : filesearch.getResult()){
publish(matched);
}
}
return null;
}
@Override
protected void process(List<String> chunks) {
for(String matched : chunks){
directoriesTextArea.append(matched + "\n");
}
}
@Override
protected void done() {
directoriesTextArea.append("\nDone!");
}
};
worker.execute();
}
================= РЕДАКТИРОВАННАЯ ВЕРСИЯ =================
private void startButtonMouseClicked(MouseEvent e) {
directoriesTextArea.setText("");
progressBarCounter = 0;
progressBar1.setValue(0);
SwingWorker<Void, String> worker = new SwingWorker<Void, String>() {
List<String> result = new ArrayList<>();
@Override
protected Void doInBackground() throws Exception {
File file = new File(absolutePathTextField.getText());
FileSearch fileSearch = new FileSearch(fileNameTextField.getText(), file);
folderCount(file);
searchFiles(file);
return null;
}
@Override
protected void process(List<String> chunks) {
for(String file : chunks){
directoriesTextArea.append(file + "\n");
}
}
protected void folderCount(File file){
if (file.isDirectory()) {
if (file.canRead()) {
try {
for (File temp : file.listFiles()) {
if (temp.isDirectory()) {
folderCount(temp);
folderCount++;
}
}
} catch (NullPointerException e) {
}
}
}
progressBar1.setMinimum(0);
progressBar1.setMaximum(folderCount);
}
protected void searchFiles(File file) {
progressBarCounter++;
if (file.isDirectory()) {
System.out.println("Searching directory ... " + file.getAbsoluteFile());
if (file.canRead()) {
try {
for (File temp : file.listFiles()) {
progressBar1.setValue(progressBarCounter);
if (temp.isDirectory()) {
searchFiles(temp);
} else {
String temp2 = temp.getName().toLowerCase();
String trimmedName = temp.getName().toLowerCase();
try {
trimmedName = temp2.substring(0, temp2.lastIndexOf("."));
} catch (StringIndexOutOfBoundsException e) {
}
if (fileNameTextField.getText().toLowerCase().equals(trimmedName)) {
System.out.println(fileNameTextField.getText() + " == " + trimmedName);
publish(temp.getAbsolutePath());
} else {
System.out.println(fileNameTextField.getText() + "!= " + trimmedName);
}
}
}
} catch (NullPointerException e) {
}
} else {
System.out.println(file.getAbsoluteFile() + "Permission Denied");
}
}
}
};
worker.execute();
}