Allora perche' il numero lo chiedi nel main? Chiedilo prima di istanziare tcounter, poi lo passi al costruttore di tcounter che modificherai opportunamente per accettare un int come parametro.
Allora perche' il numero lo chiedi nel main? Chiedilo prima di istanziare tcounter, poi lo passi al costruttore di tcounter che modificherai opportunamente per accettare un int come parametro.
anche io ho problemi con la progress bar
ho messo la classe
class tCounter extends Thread {
public void run() {
jProgressBar1.setValue((int)caricaper);
jLabel3.setText("copiate "+numf+" immagine su "+filenumber);
}
}
e poi nel programma alla funzione che mi necessita ho aggiunto
private void Copiafile(File orig,File dest){
try{
FileInputStream in = new FileInputStream(orig);
FileOutputStream out = new FileOutputStream(dest);
int c;
byte[] bytes = new byte[1024];
while((c=in.read(bytes))!=-1)
{
out.write(bytes,0,c);
}
in.close();
out.close();
System.out.println((int)caricaper);
tCounter myCounter = new tCounter();
myCounter.start();
}
catch (Exception e){
e.printStackTrace();
}
}
mi aggiorna solamente alla fine lo stesso mi sapete aiutare?
grazie
I thread in swing vengono spesso gestiti in maniera inaspettata. Meglio usare un swing.Timer per operazioni come queste.
codice:class tCounter implements ActionListener { public void actionPerformed(ActionEvent evt) { jProgressBar1.setValue((int)caricaper); jLabel3.setText("copiate "+numf+" immagine su "+filenumber); } } //Nell'altra classe int speed = 100; //La barra sara aggiornata ogni decimo di secondo. timer = new Timer(speed, this); timer.start();
mi da errore ma magari ho messo qualcosa in un posto sbagliato
questo è il codice
/*
* muovifoto.java
*
* Created on 23 luglio 2007, 15.19
*/
package muovifoto;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.io.File.*;
import java.lang.String.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.Timer;
public class muovifoto extends javax.swing.JFrame {
/** Creates new form muovifoto */
public muovifoto() {
initComponents();
}
<editor-fold>
....
</editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
long totalsize, filenumber;
speed = 100; //La barra sara aggiornata ogni decimo di secondo.
timer = new Timer(speed, this);
timer.start();
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
String datams = formatter.format(date);
faidir(datams,0);
jLabel2.setText("Copia eseguita con successo");
}
private void Copiafile(File orig,File dest){
caricaper = 0;
try{
FileInputStream in = new FileInputStream(orig);
FileOutputStream out = new FileOutputStream(dest);
int c;
byte[] bytes = new byte[1024];
while((c=in.read(bytes))!=-1)
{
out.write(bytes,0,c);
}
in.close();
out.close();
System.out.println((int)caricaper);
}
catch (Exception e){
e.printStackTrace();
}
}
public void conoscidim(String sDir, String dDir) {
....
}
public void copyDirectory(String sDir, String dDir) throws IOException {
...
Copiafile(srcDir, dstDir);
}
}
public void faidir(String datadir, int numpres) {
...
}
class tCounter implements ActionListener {
public void actionPerformed(ActionEvent evt) {
jProgressBar1.setValue((int)caricaper);
jLabel3.setText("copiate "+numf+" immagine su "+filenumber);
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new muovifoto().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JProgressBar jProgressBar1;
// End of variables declaration
private int filenumber;
private double propor;
private double totalsize;
private int numf;
private double caricabar;
private double caricaper;
private int speed;
private Timer timer;
}
questa riga da errore timer = new Timer(speed, this);
grazie
Si, scusami ho fatto copia-incolla da un codice vecchio. Al posto di this metti un istanza del task che vuoi eseguire (new tCounter()).
speed = 100; //La barra sara aggiornata ogni decimo di secondo.
timer = new tCounter();
timer.start();
ho cambiato cosi e mi da errore alla riga
timer.start();
Credo tu abbia fatto confusione mentre leggevi.
quindiAl posto di this metti un istanza del task che vuoi eseguire (new tCounter()).
Un timer funziona cosi'. Tu gli passi un intervallo e un ActionListener.codice:timer = new Timer(speed, new tCounter();); timer.start();
Dal momento che fai start ogni intervallo di millisecondi chiama il metodo ActionPerformed dell'ActionListener che gli hai passato.
Naturalmente dovrai gestire anche la terminazione del timer, altrimenti continua ad andarti all'infinito. Potresti mettere alla fine del metodo ActionPerformed un controllo tipo if(numf==filenumber), in caso affermativo chiami timer.stop.
non mi da nessun errore ma non fa neanche niente
Il metodo jButton1ActionPerformed quando viene richiamato. Posta la parte di codice che lo usa.