SwingWorker

Java

Swing

28/11/2019

Boa Tarde!


Preciso de uma ajuda.

Estou desenvolvendo um programa onde envolve rotas, diante disso eu consegui passar pra um .txt as longitude e latitude de todas as cidades, e isso me gerou um arquivo com 5565 linhas com 4 lunas.
É um trabalho pra faculdade e preciso usar Thread mas descobri que se eu gerar um Thread pelo frame do swing ele não vai conseguir lidar com tantos dados de uma maneira funcional,.
Descobri o swingWorker mas estou tendo grande dificuldade para implementar no código, e preciso que faça essa leitura pois eu irei pegar esse valores processados pela Thread e jogar em um JCOMBOX, que ira funcionar como filtro de acordo
com a escolha do usuário, abaixo estará meu código com a Thread padrão, que não está funcional.

package xyz.utilidades;

import java.io.BufferedReader;
import java.io.FileReader;

public class Cidade {

private String cidadeOrigem;
private String cidadeDestino;
private String[][] dados;
private String nomeDoArquivo = "cidades.txt";

public Cidade() {
}

public Cidade(String cidadeOrigem) {
this.cidadeOrigem = cidadeOrigem;
}

public String[] getCidades(String estado) {
int numeroDeCidades = 0;
int j = 0;
//pega o número de cidades para a criação da array
for (int i = 0; i < dados.length; i++) {
if (dados[i][1].equals(estado)) {
numeroDeCidades++;
}
}
String[] cidades = new String[numeroDeCidades];
for (int i = 0; i < dados.length; i++) {
if (dados[i][1].equals(estado)) {
cidades[j] = dados[i][0];
j++;
}
}

return cidades;
}

public String[] getEstados() {
String[] estados = new String[26];
estados[0] = dados[0][1];
int j = 1;
int cont = 0;

for (int i = 0; j < 26; i++) {
for (int k = 0; k <= j; k++) {
if (dados[i][1].equals(estados[k])) {
cont++;
}
}
if (cont == 0) {
estados[j] = dados[i][1];
j++;
}
cont = 0;
}

return estados;
}

public String getCidadeOrigem() {
return cidadeOrigem;
}

public void setCidadeOrigem(String cidadeOrigem) {
this.cidadeOrigem = cidadeOrigem;
}

public String getCidadeDestino() {
return cidadeDestino;
}

public void setCidadeDestino(String cidadeDestino) {
this.cidadeDestino = cidadeDestino;
}

public void carregarDados() throws Exception {

//TUDO COMENTADO É PARTE DO THREAD
BufferedReader reader = new BufferedReader(new FileReader(nomeDoArquivo));
dados = new String[5565][4];

// Thread pacoca = new Thread() {
// try {
// BufferedReader reader = new BufferedReader(new FileReader(nomeDoArquivo))
// String linha;
// dados = new String[5565][4];
// int cont = 0;
//
// while ((linha = reader.readLine()) != null) {
// String[] partes = linha.split("/");
// for (int i = 0; i < 4; i++) {
// dados[cont][i] = partes[i];
// }
// cont++;
// }
// } catch(Exception e) {
// throw new Exception(e.getMessage());
// }
// }.start();

Thread thread1 = new Thread() {
@Override
public void run() {
try {
String linha;
dados = new String[5565][4];
int cont = 0;

while ((linha = reader.readLine()) != null) {
String[] partes = linha.split("/");
for (int i = 0; i < 4; i++) {
dados[cont][i] = partes[i];
}
cont++;
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
};
thread1.start();
//
// Thread thread2 = new Thread() {
// @Override
// public void run() {
// try {
// String linha;
// int cont = 0;
//
// while ((linha = reader.readLine()) != null) {
// if (cont < 2701) {
//
// } else {
// String[] partes = linha.split("/");
// for (int i = 0; i < 4; i++) {
// dados[cont][i] = partes[i];
// }
// cont++;
// }
// }
// } catch (Exception e) {
// System.out.println(e.getMessage());
// }
// }
// };
//
// thread2.start();
//
// thread1.join();
// thread2.join();
}
}
Raphael Santana

Raphael Santana

Curtidas 0
POSTAR