Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich benötige für ein Projekt die apache commons, habe aber Probleme diese zu installieren. Es gibt zwar tausende Tutorials für die Einbindung über Netbeans und Eclipse, aber da ich bislang nur sublime nutze, kann ich da leider nicht viel mit anfangen, bzw. habe keine Idee wie ich das gesehene auf sublime anwenden soll. Ich würde jetzt ungern auf einen anderen editor umsteigen und wäre von daher dankbar wenn mir jemand ein paar Tipps geben könnte wie ich das Problem lösen kann.
Ok, ich fürchte ich muss den Thread doch noch mal hervorkramen. Und zwar versuche ich den folgenden Democode auszuführen:
Java:
package org.kodejava.example.commons.net;
import org.apache.commons.net.ftp.FTPClient;
import java.io.FileInputStream;
import java.io.IOException;
public class FileUploadDemo {
public static void main(String[] args) {
FTPClient client = new FTPClient();
FileInputStream fis = null;
try {
client.connect("ftp.domain.com");
client.login("admin", "secret");
//
// Create an InputStream of the file to be uploaded
//
String filename = "Touch.dat";
fis = new FileInputStream(filename);
//
// Store file to server
//
client.storeFile(filename, fis);
client.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
client.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Das compilieren hat über Javac -cp .:"sourcepfad" FileUploadDemo.java funktioniert. Wenn ich aber über java ausführen will, bekomme ich die fehlermeldung, die hauptklasse würde nicht existieren, obwohl die ja im code enthalten ist...:bahnhof:
habe auch versucht den Aufruf inklusive der pathangabe zu starten, aber die Fehlermeldung ist die selbe. Habe absolut keine Idee mehr, wäre knorke, wenn jemand nen vorschlag hat.
(Um es einfach zu halten: ) Du bist auf der Kommandozeile in jenem Verzeichnis ("aktuelles Verzeichnis"), in dem es als Unterverzeichnis gibt:
./org
(darunter gibt es dann kodejava, darunter dann example, ...)
Dein Aufruf lautet:
java org.kodejava.example.commons.net.FileUploadDemo
Ein Aufruf
dir .\org\kodejava\example\commons\net
zeigt die Datei
FileUploadDemo.class
an?
Und trotzdem funktioniert es nicht? Was für eine Fehlermeldung erhältst du?
Ok, erst mal danke für die Antwort und sorry, dass ich mich jetzt erst melde, ich bin leider nicht vor heute dazu gekommen. Habe mich noch mal ein bisschen ins Thema eingelesen, damit ich die Befehle einigermaßen verstehe, die ich benutze; naja mit mäßigem Erfolg. Mir ist noch nicht ganz klar wie package. ... funktioniert. Ist das eine Angabe, die der Compiler oder die Runtime tatsächlich braucht, oder ist das für einen User, der den Code bearbeitet? Und wo bekomm ich den Namen des Packages her, ist der immer identisch mit dem Namen der .jar?
Jedenfall, was das kodejava package angeht, habe ich nichts zum downloaden gefunden auf der Seite. Die FtpClass.class, die ich brauche und die mir die Probleme verursacht stammt aber auch aus den apache commons. Deswegen habe ich mangels besserer Ideen erst mal die package angabe aus der ersten zeile herausgenommen.
Damit komme ich einen Schritt weiter, aber trotzdem bekomme ich natürlich die jars noch nicht zum laufen. Ich habe innerhalb des Klassenverzeichnis ein Unterverzeichnis mit dem namen apache und darin befinden sich die 3 jars commons-...sources, ...3.3., und examples. Da ein weiteres erstes Verständnisproblem. Nutze ich zum kompilieren die ... sources oder die normale ..3.3?
Naja habe jedenfalls beides ausprobiert. Das kompilieren funktioniert ohne Fehlermeldung mittels
In beiden Fällen wird die class File, auf die ich zugreifen möchte im Klassenpfad Ordner angelegt, zusammen mit allen anderen class Files des Pakets. Wenn ich dann jedoch ausführen möchte bekomme ich eine java.lang.NoClassDefFoundError exception, was wohl heisst, dass der class loader zur runtime die Klasse nicht finden kann, bzw. nicht drauf zugreifen kann. Habe ein bisschen mit halbgaren Ideen rumgespielt, mal mit cp ausgeführt, mal ohne, jedoch immer das gleiche Ergebnis.
Deshalb wieder zurück zur Angabe des packages. Habe irgendwie das Gefühl, dass es wohl doch daran liegt, aber sobald ich einen package namen angebe, erhalte ich beim ausführen immer die fehlermeldung:
Code:
Fehler: Hauptklasse FileUploadDemo konnte nicht gefunden oder geladen werden
was mich ja verwundert, weil es ja eine Main methode gibt.
Für Anregungen wäre ich jedenfalls weiterhin überaus dankbar.
ps. hier noch mal der aktuelle code:
Java:
import org.apache.commons.net.ftp.FTPClient;
import java.io.FileInputStream;
import java.io.IOException;
public class FileUploadDemo{
public void los(){
FTPClient client = new FTPClient();
FileInputStream fis = null;
try {
client.connect("ftp.domain.com");
client.login("admin", "secret");
//
// Create an InputStream of the file to be uploaded
//
String filename = "Touch.dat";
fis = new FileInputStream(filename);
//
// Store file to server
//
client.storeFile(filename, fis);
client.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
client.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}}
public static void main (String [] args){
FileUploadDemo ffu= new FileUploadDemo();
ffu.los();
}
}
Lies nochmal in einem Buch nach, was packages sind. Das ist ein wesentliches Konzept zur Modularität sowie der Kapselung in Java. (Z.B. die Insel)
Und um's gleich vorweg zu nehmen: Nein, man darf .class-Dateien nicht wild durch die Gegend kopieren oder von sonstwo aufrufen - die package-Struktur muss jederzeit gewahrt und beachtet werden, auch beim Aufruf mittels 'java'.