WinFuture-Forum.de: Java Ftp Immer Wieder Timeouts - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Java Ftp Immer Wieder Timeouts


#1 Mitglied ist offline   philipp65 

  • Gruppe: aktive Mitglieder
  • Beiträge: 35
  • Beigetreten: 12. Oktober 06
  • Reputation: 0

geschrieben 09. August 2009 - 17:12

allo!

Ich habe mir ein Programm geschrieben, welches mir unter anderem Bilder auf einen Server hochlädt.
Dazu verwende ich das Jakarta FTP Paket (commons net ftp) mit einer Wrapper Klasse.


Wenn ich nun Bilder hochlade (besonders bei größeren) kommt es immer wieder zu Timeouts, d.h. er bleibt immer bei irgendeinem Bild hängen...manchmal klappts und manchmal nicht. Auch unabhängig von OS und Internetanbindung.

Manchmal bleibt er hier einfach hängen und manchmal springt er wild zwischen den catch Klauseln rum. Habe mich schon stundenlang gespielt um das Problem in den Griff zu bekommen, bin nun aber komplett ausgebrannt.

Hier ein Auszug des Programms:

CODE

if (e.getSource() == uploadDirB)
{
if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
{
try
{
//Es wird ein eigener Thread erzeugt, um Swingänderungen synchron durchzuführen
new Thread(new Runnable()
{
public void run()
{
//nicht der EDT, GUI Updates

SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
//GUI Updates können dann hier von statten gehen.

createDirB.setEnabled(false);
uploadDirB.setEnabled(false);
deleteDirB.setEnabled(false);
}
});
ftp= new TestFTP();
try
{
String galName = list.getSelectedValue().toString();
File[] f = null;

//Verbindungsversuch
if (ftp.connectAndLogin(serverName, "xxx", "xxx"))
{
//Wenn erfolgreich, dann visuelle Rückmeldung

try
{
ftp.setConnectTimeout(10000);
ftp.setDefaultTimeout(10000);
ftp.setSoTimeout(10000);
ftp.setFileTransferMode(FTPClient.BINARY_FILE_TYPE
);
ftp.binary();
ftp.setPassiveMode(true);

//Wechsel in richtigen FTP Pfad
ftp.changeWorkingDirectory("www");
ftp.changeWorkingDirectory("home");
ftp.changeWorkingDirectory("webshop");
ftp.changeWorkingDirectory("images");
ftp.changeWorkingDirectory("phocagallery");
ftp.changeWorkingDirectory(galName);


FTPFile[] a = ftp.listFiles();
f = fc.getSelectedFiles();
for(lol=0;lol<f.length;lol++)
{
infoL.setText("Ladet hoch... " + (lol+1) + " / " + f.length);

ftp.uploadFile(f[lol].toString(), f[lol].getName());
System.out.println(f[lol].getName());

}




for(int i=0;i<f.length;i++)
{
for(int j=0;j<a.length;j++)
{
if (f[i].getName().equals(a[j].getName()))
{
if (f[i].length() != a[j].getSize())
{
System.out.println(f[i].getName() + " ungleich");
System.out.println("ARGH!!");
reConnect(galName, f[j]);
}
else
{
System.out.println(f[i].getName() + " gleich");
}

}
else
{
if (j == (a.length-1))
{
System.out.println("ARGH!!!");
reConnect(galName, f[j]);
}
}
}
}
}
catch (Exception e1)
{
lol=lol2;
System.out.println("ARGH!!");
reConnect(galName, f[lol]);
}




Hier die Methode reConnect, die ich geschrieben habe, wenn er einen TimeOut abfängt

CODE
public void reConnect(final String galName, final File f)
{
try
{
//Es wird ein eigener Thread erzeugt, um Swingänderungen synchron durchzuführen
new Thread(new Runnable()
{
public void run()
{
//nicht der EDT, GUI Updates

SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
//GUI Updates können dann hier von statten gehen.
infoL.setText("Connection TimeOut! Wiederverbindung...");
}
});
ftp= new TestFTP();
try
{
//Verbindungsversuch
if (ftp.connectAndLogin(serverName, "xxx", "xxx"))
{
//Wenn erfolgreich, dann visuelle Rückmeldung

try
{
ftp.binary();
ftp.setPassiveMode(true);
ftp.setConnectTimeout(7000);
ftp.setDefaultTimeout(7000);
ftp.setSoTimeout(7000);
ftp.setFileTransferMode(FTPClient.BINARY_FILE_TYPE
);

//Wechsel in richtigen FTP Pfad
ftp.changeWorkingDirectory("www");
ftp.changeWorkingDirectory("home");
ftp.changeWorkingDirectory("webshop");
ftp.changeWorkingDirectory("images");
ftp.changeWorkingDirectory("phocagallery");
ftp.changeWorkingDirectory(galName);






ftp.uploadFile(f.toString(), f.getName());



}
catch (Exception e1)
{
System.out.println("AHA11");
reConnect(galName,f);
}
finally
{}
}
else
{
System.out.println("AHA12");
reConnect(galName,f);
}
}
catch(Exception e2)
{
System.out.println("AHA13");
reConnect(galName,f);
}
}
}).start();
}
catch (Exception e1)
{System.out.println("AHA14");}




Dazu muss es doch bessere Lösungen geben?!?

Habt ihr dazu Ideen?
EDIT: Wieso übernimmt der nicht die Tabsprünge in der Codebox?! Kann ja niemand lesen so..

LG
Philipp

Dieser Beitrag wurde von philipp65 bearbeitet: 09. August 2009 - 17:16

0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 10. August 2009 - 06:57

Warum verschluckst du denn auch einfach die Exception? Dafür ist sie doch da, sie enthält die konkreten Informationen zu deinem Fehler.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0