po…q droga… não ta atualizando a barra…
to com um problema na classe do meu ambiente grafico, em relação a parte de atualiza a JProgressBar…
eu tenho o meu ambiente grafico, com a JProgressBar, que segue abaixo, a classe Janela, e outra janela que eu fiz com um botão só pra aumenta o valor da barra pra testa, e assim mesmo não funciona, por isso que acredito que o problema seja na classe Janela e não na que eu coloquei a regra de negocio.
pra aumentar o valor da barra, eu coloquei um metodo setX, que recebe o valor da porcentagem e o atribui a barra, mais não esta funcionano
segue o codigo das duas classes:
TestaBarra // que é chamada da propria classe Janela
import java.awt.Container;
import javax.swing.*;
import java.awt.event.*;
public class TestaBarra extends JFrame{
/** Creates a new instance of TestaBarra */
public TestaBarra() {
super("testa");
}
public static void main(String args[]){
TestaBarra t=new TestaBarra();
t.cria();
}
int x=0;
public void cria(){
setSize(575,594);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container tela = getContentPane();
setLayout(null);
JButton botao=new JButton("incrementa");
botao.setBounds(25,25,100,25);
tela.add(botao);
botao.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
Janela j=new Janela();
x+=5;
j.setX(x);
JOptionPane.showMessageDialog(null, x);
}
}
);
}
}
classe janela //a principal
/*
*esse programa tem por finalidade copiar os arquivos de uma pasta no server em outra local
*continuamente, ou seja, atualizando, e os arquivos do server depois de copiados
*devem ir para uma terceira pasta de backup, deixando a anterior vazia
*/
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ButtonGroup;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.JRadioButton;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileInputStream;
//era mais facil ter importado o swing, io e awt inteiros...rs só o swing inteiro e os outros não ja livrava uma carinha ja...
public class Janela extends JFrame implements Runnable{
private JTextField verificaEm;
private JTextField insereEm;
private JTextField backupEm;
public JProgressBar progresso=new JProgressBar();
private JRadioButton sobrescrever;
private JRadioButton naosobrescrever;
private JRadioButton sobrescreverantigos;
private JLabel acao=new JLabel("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||");//eu fiz isso pra testa até onde chega na tela...depois eu tiro
private String data="30/11/07", ram="";
boolean ativada=false;
public int x=0;
static Thread verifica;
public void setX(int x){
progresso.setValue(x);
//repaint(); <-- não adianto
}
public void run(){
while(true){
//System.out.println(Thread.currentThread().getName());//só pra teste da thread
Atualizador a=new Atualizador();
a.Processa(verificaEm.getText(), insereEm.getText());
//esse bloco ai em baixo faz a thread espera pra executa denovo
synchronized(this) {
try {
this.wait(10000);//a cada minuto
} catch (InterruptedException ex) {}
}
}
}
public Janela() {
super("Copiador de arquivos novos");
}
public static void main(String args[]){
Janela j = new Janela();
j.montaJanela();
verifica=new Thread(j);
}
public void montaJanela(){
//parametros da janela
setSize(575,594);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container tela = getContentPane();
setLayout(null);
tela.setBackground(new Color(0,0,0));
//areas de texto da pasta a se verificar e da pasta a se inserir os arquivos, bem como os botões
verificaEm=new JTextField();
insereEm=new JTextField();
//especifica o tamanho da area de texto e a insere na tela
verificaEm.setBounds(30,70,400,20);
tela.add(verificaEm);
//idem anterior, para a outra area de texto
insereEm.setBounds(30,110,400,20);
tela.add(insereEm);
//2 botões para chamarem fileshooser para ajudar o usuario a escolher o endereço, ai abaixo
//chama a api do botão, depois fala o tamanho, depois tira a borda e depois adiciona na tela
JButton procurar1=new JButton("Procurar");
procurar1.setBounds(440, 70,100,20);
procurar1.setBorder(null);
tela.add(procurar1);
//idem acima
JButton procurar2=new JButton("Procurar");
procurar2.setBounds(440,110,100,20);
procurar2.setBorder(null);
tela.add(procurar2);
//textos não selecionaveis na janela para explicação, labels
JLabel explica1=new JLabel("Diretorio a procurar por arquivos recentes");
explica1.setBounds(30,45,270,25);
explica1.setForeground(new Color(255,255,255));
tela.add(explica1);
JLabel explica2=new JLabel("Diretorio à salvar os arquivos recentes");
explica2.setBounds(30,85,270,25);
tela.add(explica2);
explica2.setForeground(new Color(255,255,255));
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//"Copiando o arquivo <nome com maximo de 25 caracteres> do servidor"
acao.setBounds(30,150,285,25);
acao.setForeground(new Color(255,255,255));
tela.add(acao);
//essa proxima parte é complicada, deve-se criar o objeto da area de texto para adiciona-lo
// no objeto de barra de rolagem, para poder adicionar as barras de rolagem lateral e inferior
//mais pra isso funciona, esses corno tem que ta dentro de um objeto de painel, ou seja
//cria-se o painel, adiciona-se a ele a barra de rolagem, e a essa a area de texto, criando-se
//as coisas na ordem inversa a se usar.
JTextArea resumo=new JTextArea(20,50);//aqui vai ter aquelas mensagem de "tal arquivo copiado com sucesso"
resumo.setBackground(new Color(0,0,0));
resumo.setEditable(false);
tela.add(resumo);
JScrollPane painelrolagem=new JScrollPane();
painelrolagem = new JScrollPane(resumo);
painelrolagem.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
painelrolagem.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
JPanel painel=new JPanel();
painel = new JPanel();
painel.setBackground(new Color(0,0,0));
painel.add(painelrolagem);
painel.setBounds(0,210,569,350);//
tela.add(painel);
progresso.setBounds(330,150,100,20);//30,188,150,20
//progresso.setIndeterminate(true);
progresso.setMaximum(100);
progresso.setStringPainted(true);
progresso.setValue(x);
tela.add(progresso);
progresso.setVisible(true);
JButton atualizar=new JButton("atualizar");
atualizar.setBounds(440,150,100,20);
atualizar.setBorder(null);
tela.add(atualizar);
//esses 2 serão usados pra ser se irá sobrescrever arquivos antigos
sobrescrever=new JRadioButton("sobrescrever arquivos");
naosobrescrever=new JRadioButton("não sobrescrever arquivos");
sobrescreverantigos=new JRadioButton("sobrescrever arquivos antigos");
sobrescrever.setBounds(30,180,155,20);
sobrescrever.setBackground(new Color(0,0,0));
sobrescrever.setForeground(new Color(255,255,255));
tela.add(sobrescrever);
naosobrescrever.setBounds(185,180,178,20);
naosobrescrever.setBackground(new Color(0,0,0));
naosobrescrever.setForeground(new Color(255,255,255));
naosobrescrever.setSelected(true);
tela.add(naosobrescrever);
sobrescreverantigos.setBounds(363,180,205,20);
sobrescreverantigos.setBackground(new Color(0,0,0));
sobrescreverantigos.setForeground(new Color(255,255,255));
tela.add(sobrescreverantigos);
ButtonGroup bg= new ButtonGroup();
bg.add(sobrescrever);
bg.add(naosobrescrever);
bg.add(sobrescreverantigos);
atualizar.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
try {
if (!(verificaEm.getText().equals("")||insereEm.getText().equals("")))
if (ativada==false){
verifica.start();
ativada=true;
}
else
JOptionPane.showMessageDialog(null, "preencha os endereços");
} catch(IllegalThreadStateException i){
System.out.println("axo q deu merda...rs");
}
}
}
);
//aqui, criaremos estarão os codigos que vão chamar o metodo que deve ser chamado ao se clicar nos botões
//esses metodos terão o codigo que deve ser feito caso o usuario clique
//usei o mesmo metodo pra ambos os botões, pra aproveita o mesmo objeto,
//pq essa porcaria foi verificada em 10 Mega na memoria no ctrl alt e del,
//imagina ter 2 por motivos besta
procurar1.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
botaoEscolher(e, true);
}
}
);
procurar2.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
botaoEscolher(e, false);
}
}
);
sobrescreverantigos.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
do{
try {
ram=JOptionPane.showInputDialog("insira uma data no formato dd/mm/aa, ou clique em cancelar para manter data antiga, "+data);
if (ram.equals(null))
ram=data;
} catch (Exception ex) {
//JOptionPane.showMessageDialog(null, "sera mantida a data de "+data);
ram=data;
}
}while(ram.equals(""));
data=ram;
}
}
);
//precisei fazer isso ai em baixo pra aparecer a janela logo,...senao aparece um botão...depois outro...por ai vai
show();
repaint();
TestaBarra tb=new TestaBarra();
tb.cria();
}
public void botaoEscolher(ActionEvent e, boolean botao){
JFileChooser escolher = new JFileChooser();
escolher.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
String pasta="";
int res = escolher.showOpenDialog(null);
if(res == JFileChooser.APPROVE_OPTION){
File diretorio = escolher.getSelectedFile();
pasta = diretorio.getPath();
if (botao)
verificaEm.setText(pasta);
else
insereEm.setText(pasta);
}
else
JOptionPane.showMessageDialog(null, "Voce nao selecionou nenhum diretorio.");
}
}