Ciao qualcuno può aiutarmi a risolvere il mio problema? In sostanza non riesco a chiudere un thread.Questo thread incapsula la creazione di un JFrame che contiene un player java.
Questa è una delle 600 prove che ho fatto...ma questo maledetto thread non si vuole chiudere!
Questo è l'actionPerformed della classe
codice:
public void actionPerformed(ActionEvent ae)
{
Object source=ae.getSource();
// ****** Salvataggio Cartelle che conterranno file Jpg ******
if (source==grabButton)
{
JFileChooser finestra= new JFileChooser();
finestra.setDialogTitle("Salva Files");
finestra.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
finestra.setCurrentDirectory( new File ("c:\\"));
int risposta=finestra.showSaveDialog(this);
if (risposta == JFileChooser.APPROVE_OPTION)
{
File cart = finestra.getSelectedFile();
urlFrames=cart.getAbsolutePath();
if (T_grabvideo == null)
{
T_grabvideo = new Threadgrabvideo();
T_grabvideo.start();
}
}
}
if (source==closeButton)
T_grabvideo=null;
} //chiusura ectionPerformed
//CLASSE CHE INCAPSULA IL THREAD
class Threadgrabvideo extends Thread
{
public void run()
{
int k=1;
int j=0;
try
{
//while(true)
//{
//File cart = finestra.getSelectedFile();
//urlFrames=cart.getAbsolutePath();
int frameId=0;
for ( int i=0; i<=totalFrames; i=i+camp)
{
j++;
frameId++;
// inizialmente mi posiziono sul frame 0 (istante 0)
if (i==0)
fpc.skip(0);
// poi mi posiziono sui frame successivi, secondo il campionamento
else
fpc.skip(camp);
// grabba il frame relativo
if (currentFrame !=FramePositioningControl.FRAME_UNKNOWN)
{
currentFrame =fpc.mapTimeToFrame(p.getMediaTime());
currentTime = fpc.mapFrameToTime(i);
}
Buffer buff = new Buffer();
buff = fgc.grabFrame();
// converte buffer - image
BufferToImage bti = new BufferToImage((VideoFormat)buff.getFormat());
img = bti.createImage(buff);
if(j%65==0) k++; //k è il nome della cartella
//elimino dal nome del video la parte finale...x poi utilizzarlo
//come nome delle cartelle riferite a quel video
namefile=namefile.replaceAll(".avi","");
//creazione cartella
new File(urlFrames+"/"+namefile+"_"+k).mkdirs();
//percorso dei file jpg
String pathFrame = (urlFrames+"/"+namefile+"_"+k+"/"+j+".jpg");
File fileFrame = new File(pathFrame);
//creazione del percorso del commento e del medesimo
pathCommentsTxt=(urlFrames+"/"+namefile+"_"+k+"/Comments_"+k+".txt");
FileOutputStream file = new FileOutputStream(pathCommentsTxt);
//inserisco 64 spazi vuoti all'interno di ogni file .txt creato
//altrimenti si generano eccezioni
File f1=new File(pathCommentsTxt);
FileOutputStream fos1=new FileOutputStream(f1);
PrintStream ps1=new PrintStream(fos1);
for (int l=0;l<65;l++)
ps1.println("");
try
{
System.err.println(currentTime.getSeconds());
ImageSaver(img,fileFrame);
}
catch (Exception e)
{
System.err.println(e);
}
}
System.err.println(frameId);
//}
}
catch (Exception EX)
{
//System.out.println("errore");
System.out.println(EX);
}
}
}
Sempre allinterno della stessa classe che contiene l'actionperformed,ho creato una classe che manda in esecuzione il thread (class Threadgrabvideo).
In sostanza quando si preme il "closeButton" si dovrebbe fermare l'esecuzione del video nel player (infatti ho impostato T_grabvideo=null
...ma ancora non ci sono riuscito :S
A riguardo ho letto anche molte discussioni anche di questo sito che ho trovato tramite google...ma non ho risolto il problema.
Vi prego...salvatemi