Erstellen Sie ein Projekt, das die JAR-Datei in seinem Klassenpfad verwendet...

jono

Top Contributor
Ich soll eine Jar Datei mit class path in eclipse einbinden, wie mache ich das? Unser Dozent hat uns nur über die Kommandozeile gezeigt wie man class path anwendet aber nicht in der Entwicklungsumgebung . Kann mir da bitte einer weiterhelfen?
 
@jono was genau willst du denn machen?

Das was beschrieben wurde ist das einbinden der jar Datei bei einem Projekt in Eclipse.

Und sorry - zuerst hatte ich paar Threads verwechselt - hier geht es natürlich um Deine Thematik!
 
also inder jar Datei ist eine klasse enthalten und drei mathematische Funktionen, geht das auch mit einem decompiler?
 
Also für die Aufgabe brauchst du keinen Decompiler. Du kannst die Klassen direkt nutzen, wenn die jar Dateien im classpath enthalten sind.

Dazu kannst du die schon gezeigte Suche nutzen, ein Treffer war https://www.edureka.co/community/4028/how-to-import-a-jar-file-in-eclipse

Wenn du in eine jar Datei rein schauen möchtest, dann kannst du diese umbenennen in .zip und dann mit einem Programm Deiner Wahl öffnen. Aber wenn die die Klassen kennst, die in den jar Dateien drin sind, dann sehe ich da keinen Nutzen.
 
Ich kenne die klassen nicht da steht nur wie die Klasse heißt in der datei. Okay vielen dank. Ja nicht öffnen, sondern anzeigen, wie JustNoBody sagt. Ich werde es jetzt mal versuchen.
 
Es ist einfach nur so dass die Übung verlangt eine jar datei anzuzeigen und die mathematischen Funktionen in einer anderen klasse aufruft
 
So habe Ich es gemacht und so klappt es bei mir nicht
 

Anhänge

  • Screenshot_20200504_215232_com.android.chrome.jpg
    Screenshot_20200504_215232_com.android.chrome.jpg
    271,9 KB · Aufrufe: 9
Und nach unten gescrollt erscheint noch das hier.
 

Anhänge

  • Screenshot_20200504_220719_com.android.gallery3d.jpg
    Screenshot_20200504_220719_com.android.gallery3d.jpg
    453,2 KB · Aufrufe: 10
Das Problem ist die jar datei ist in einer zip datei, da man aber bei dem vorgehen über build path eine datei anklicken muss, wird diese direkt verwendet und in dieser ist dann eije lib und eine doc und eine pdf datei vorhanden
 
Bin neu in dem Kurs, wäre gut wenn mir jemand auf die Sprünge hilft, ich weiß schon was jar ist usw darum macht euch keine Sorgen auch wenn bisher nicht unbedingt erkennbar war.
 
Wieso willst du das jetzt anschauen? Dazu brauchst du die source oder einen Decompiler... Du sollst es aber verwenden.

Liest du überhaupt was wir schreiben?
 
Ja ich lese was ihr schreibt. Wäre gut wenn du diesen Satz gerade nicht so abstrakt formuliert hättest, das Problem ist, ich soll es verwenden okay...
Was heißt denn jetzt verwenden, meinst du das in Bezug auf die 2. Aufgabe? Also deiner Aussage nach brauche ich jetzt keinen Decompiler und soll einfach eine andere Klasse erstellen in der ich diese Funktionen aufrufe ?
 
Nein, da steht ausgegeben, nicht aufrufen mit Hilfe von System.out. Erstell einfach eine Instanz von IntMathImpl und ruf die Funktionen auf. Wie bei jeder Klasse aus dem jdk auch... Sonst geh bei den Vorlesungen nochmal ein paar Folien zurück. Mir wirds gerade ein bisschen zu doof...
 
Das ist doch genau das worum es mir hier geht, die 2. Aufgabe stellt das größte Problem dar und wenn der Prof dann sowas sagt wie: Wir wollen euch nicht ins kalte Wasser werfen wir wollen das ihr schwimmen lernt , na herzlichen Glückwunsch, deshalb frage ich ja auch hier nach, wird wahrscheinlich, wenn man weiß wie keine Schwierigkeit sein, weshalb es doch echt gerechtfertigt wäre wenn du mir dass erklären könntest..
 
Instanz wäre dann ja durch ein Import des packages wie im Screenshot möglich. Dann habe ich "IntMathsImpl intmaths = new IntMathsImpl();" in der Form die Instanz erzeugt.
Die Instanz ist nun erzeugt, wie aber gebe ich jetzt aus ?
Wenn ich wenigstens die Methodennamen der jar Datei wüsste, könnte ich ja durch ein import des packages der MathIntImpl Klasse durch System.out.println(MathIntImpl.get(Methodenname)) die funktionen ausgeben... Bitte um Hilfe
 
Zuletzt bearbeitet:
Also Eclipse bietet eine Auto Vervollständigung.
Wenn du also schon eine Instanz intmaths hast, dann kannst Du einmal schreiben: intmaths. und dann drückst Du Strg + Leertaste und dann sollte Dir Eclipse die Möglichkeiten anzeigen.

Schau Dir am Besten auch mal
an wenn du mit Eclipse arbeiten möchtest.
 
Okay, habe ich gemacht und was genau ist jetzt die Instanz von IntMathsImpl? Wie bilde ich die in einer anderen Klasse? Vor allem wie rufe ich jetzt die Funktionen aus der Klasse auf ?
 
Mir ist gerade aufgefallen, es gibt ja einmal die IntMaths.class und die IntMathsImpl.class, die IntMaths.class ist ein interface, jetzt habe ich
die 3 Funktionen aufgerufen in dem ich auf
Java:
public class Functions implements IntMaths
Functions wurde rot unterkringelt, wo drunter stand: Add unimplemented methods, das habe ich dann gemacht und es sind dann folgende Methoden entstanden:
Java:
public class Functions implements IntMaths {
 public static void main(String[] args) {
  System.out.println(IntMathsImpl.class);
 }
 @Override
public int gcd(int arg0, int arg1) {
// TODO Auto-generated method stub
return 0;
 }
 @Override
public int sqrt(int arg0) {
// TODO Auto-generated method stub
return 0;
 }
 @Override
public int square(int arg0) {
// TODO Auto-generated method stub
return 0;
 }
Wie gebe ich jetzt das Ergebnis über System.out aus ?
 
Das ist doch so wie überall.

Du hast eine beliebige Klasse (ich nenne meine Klasse mal Test) mit einer beliebigen Methode (ich nehme mal die static main Methode). Und da kannst Du Instanzen einer Klasse erzeugen (Ich nehme mal die Klasse String) und darauf Methoden aufrufen (Ich nehme mal einfach die Methode length):

Code:
public class Test {
  public static void main(String[] args) {
    String testInstanz = new String("abc");
    int length = testInstanz.length();
    System.out.println(length);
  }
}
 
Java:
 public static void main(String[] args) {
IntMaths result = new IntMaths();
int gcd = result.gcd(gcd, gcd);
  System.out.println(gcd);
 }
Warum wird IntMaths rot unterstrichen?
 
IntMaths ist ein Interface und Du kannst keine Instanz von einem Interface erzeugen. Du wolltest vielleicht
IntMaths result = new IntMathsImpl();
schreiben.

Und das
int gcd = result.gcd(gcd, gcd);
macht wenig Sinn. Du definierst gcd ja erst. Was willst Du denn bei result.gcd genau übergeben?
 
This package contains the interface IntMaths and its implementation in the class IntMathsImpl.
Write a class that calls the three functions and prints the result on System.out
Es steht doch alles haarklein da:

Das Package enthält das Interface IntMaths und seine Implementation in der Klass IntMathsImpl.
Schreibe eine Klasse, die die drei (im Interface enthaltenen) Methoden aufruft und gib das Ergebnis auf System.out aus.

Beispiel mit Interface, Implementation und Ausgabe:
Java:
// fürs Beispiel nur eine Methode, keine drei
interface Foo {
    int add(int value1, int value2);
}

class FooImpl implements Foo {
    @Override
    public int add(int value1, int value2) {
        return value1 + value2;
    }
}

class Test {
    Foo foo = new Foo();
    
    int result = foo.add(41, 1);
    System.out.println(result);
}

Sag mal @jono, wir haben im Dezember doch seitenlang über äußere und innere Klassen und Milchprodukte geschrieben. Und jetzt weißt du immer noch nicht, wie man die Instanz einer Klasse erzeugt und Methoden darauf aufruft?
 
@temi Ich weiß wie man Instanzen einer Klasse erzeugt. Das Problem ist dass ich es länger nicht mehr gemacht habe. Außerdem habe ich das mit dem Interface selbst herausbekommen und ich habe lediglich oben etwas versucht, weil ich das in Zusammenhang mit einer Interface einfach nicht mehr wusste. Du musst doch nicht gleich so antworten.
Java:
Foo foo = new Foo(); muss natürlich Foo foo = new FooImpl(); sein.
Warum jetzt nicht Foo foo = new Foo(); ? So kenne ich das nämlich
 
@thecain Alles vorkauen ist auch etwas übertrieben, ich wusste es nicht im zusammenhang mit einem interface hab das einfach nicht mehr in erinnerung gehabt, es ist nicht so das ich alles vergessen habe, genau im Gegenteil habe vieles hier gelernt und behalten auch das mit Instanzerzeugung ist ja kein Problem eigentlich nur ich frage lieber nach bevor ich da etwas falsch mache. und wenn ich dann ein wenig falsch mache , bekommt man dann so eine Antwort 😀.
Java:
Nein, da steht ausgegeben, nicht aufrufen mit Hilfe von System.out. Erstell einfach eine Instanz von IntMathImpl und ruf die Funktionen auf. Wie bei jeder Klasse aus dem jdk auch... Sonst geh bei den Vorlesungen nochmal ein paar Folien zurück. Mir wirds gerade ein bisschen zu doof...
Hier sagst du ich soll eine Instanz von IntMathImpl erstellen. Dazu brauche ich erstmal den Namen der Methode, in dem ich "class Functions implements IntMaths {}" benutze, erst so bringt mir die instanzerzeugung etwas.
 
Zuletzt bearbeitet:
Wenn Du da zwei Integer übergeben willst, dann mach das doch. Also entweder übergibst du da direkt ein Integer Literal oder du definierst Variablen, denen Du erst einmal einen Wert zuweist.

Die deklarierte Variable gcd nutzt du da, ohne dass ihr ein Wert zugewiesen wurde. Bei einer lokalen Variable müsste da eigentlich der Compiler meckern, denn lokale Variablen sind nicht vorab mit 0 initialisiert (wie es z.B. bei Instanzvariablen der Fall wäre).
 

Zurück
Oben