ubuntuusers.de

[gelöst] Java-Programmierung, Klassen einbinden

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

dahthai

Avatar von dahthai

Anmeldungsdatum:
14. Juli 2005

Beiträge: 101

Moin!

Also studienbedingt möchte ich Java-Programmierung erlernen. Soweit so gut, habe JAVA auch einwandfrei über den SUN-Download installiert bekommen und "HelloWorld" klappt auch! 😉

Jedenfalls gehts mir jetzt darum, die sogenannten IOTools einzubinden, allerdings scheitere ich daran.

Ich muß dazu die Variable $CLASSPATH systemweit (Bash-weit) definieren, dazu bin ich der obigen Anleitung gefolgt und habe zusätzlich noch diesegefunden, allerdings kommt jedesmal, wenn ich meinen Benutzernamen neu gestartet habe:
javac Test.java
Test.java:1: package Prog1Tools does not exist
.

Wie binde ich zusätzliche Klassen in /home/user/.bash_profile oder /home/user/.bashrc ein, daß sie $CLASSPATH bekannt sind, bzw. unter JAVA funktionieren?
Ich habe es auch schon unter /root/.profile bzw. /root/.bashrc versucht + anschliessend Neustart, aber kein Erfolg.

Danke für einen Tipp!
dahthai

Mossi

Anmeldungsdatum:
6. Juli 2005

Beiträge: 382

Wohnort: Regensburg

steht dein CLassPath in der Ausgabe von "echo $CLASSPATH" drin?

Wenn nein, poste mal deinen Eintrag in ~/.bashrc Dort sollte er eigentlich gut aufgehoben sein und müsste ungefähr so aussehen:

CLASSPATH=.:~/java/other/Prog1Tools.zip:$CLASSPATH;
export CLASSPATH


Am besten schreibst du das ganz am Ende der Datei.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

Alternative:
Wenn Du das Paket häufiger brauchst, dann kannst Du es nach $JAVA_HOME/jre/lib/ext kopieren, und kommst ohne CLASSPATH aus.
Wenn Du einen CLASSPATH hast, dann muß auch das aktuelle Verzeichnis . (so es gebraucht wird) im CLASSPATH stehen.
Hat man keinen CLASSPATH, so ist das aktuelle Verzeichnis automatisch ein Ort, an dem nach .class-Files gesucht wird.

Wieso die ihr Paket als zip, und nicht als jar vertreiben, würde mich aber mal interessieren.
Auch besagt die Konvention, daß Pakete nur aus Kleinbuchstaben bestehen sollten (prog1tools, nicht Prog1Tools).

pippovic

Avatar von pippovic

Anmeldungsdatum:
12. November 2004

Beiträge: 9130

Ich darf da kurz mal das OpenBook "Java ist auch eine Insel" empfehlen, welches vor kurzem in der fünften Version erschienen ist.

Gruß
pippovic

dahthai

(Themenstarter)
Avatar von dahthai

Anmeldungsdatum:
14. Juli 2005

Beiträge: 101

Morgen!
Erstmal danke für die schnellen Antworten, also vorweg, die Ausgabe von echo $CLASSPATH ist leer, also wird CLASSPATH nicht definiert sein, ich probiere gleich mal, das Packet in ~/JAVA_HOME/jre/lib/ext zu kopieren.

Woran ich viell. noch gedacht habe, ist die Rechtevergebung. Ich lagere Prog1Tools.zip unter /home/user/java. Wenn ich nun in der ~/.bashrc den CLASSPATH definiere, ist es da viell. relevant welche Rechte ich an dem zip-Archiv habe, bzw. welche Rechte ich habe CLASSPATH überhaupt zu definieren, oder darf das sowieso nur Root?

Greetz erstmal!
dahthai

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

root könnte unverbindlich einen CLASSPATH für alle definieren (in /etc/bash.bashrc) , aber jeder User könnte ihn ergänzen oder ersetzen, jeweils für sich selbst.
Um Klassen aus Archiven/ Verzeichnissen zu lesen genügt es, Leserechte auf das .class-File/ das .jar- oder .zip-Archiv zu haben.
Die Rechte (rwx) kann der Besitzer einer Datei ändern.

dahthai

(Themenstarter)
Avatar von dahthai

Anmeldungsdatum:
14. Juli 2005

Beiträge: 101

Also, ich poste erstmal meine /.bashrc:

...
#IO.Tools
CLASSPATH=.:~/home/dahthai/java/Prog1Tools.zip:$CLASSPATH;
export CLASSPATH

damit funktioniert es nicht und in der Konsole erscheint oben erwähntes "Package IO.Tools does not exist".

Nun zu eurem 2.Lösungsversuch:
(@user unknown)

In dem Verzeichnis $JAVA_HOME/jre/lib/ext befinden sich .jar Dateien, was kopiere ich nun dorthin? Die zip-File oder die entpackten .class Files aus dem .zip-Archiv?
Was muß ich dann in meinem erstellten Java-Programm schreiben?
"import Prog1Tools" oder "import IOTools.class"?

Dann ist mir deine Erklärung mit dem
"...muß auch das aktuelle Verzeichnis . (so es gebraucht wird) im CLASSPATH stehen. " auch noch nicht ganz klar, kannst du darauf nochmal kurz genauer eingehen?

Greetz und ich probiere alles soweit aus, wenn ich wieder daheim bin!
dahthai

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

dahthai hat geschrieben:

CLASSPATH=.:~/home/dahthai/java/Prog1Tools.zip:$CLASSPATH;
export CLASSPATH

sehr schön.
dahthai hat geschrieben:

In dem Verzeichnis $JAVA_HOME/jre/lib/ext befinden sich .jar Dateien, was kopiere ich nun dorthin?

Zips oder Jars - heute also zip.
dahthai hat geschrieben:

Was muß ich dann in meinem erstellten Java-Programm schreiben?
"import Prog1Tools" oder "import IOTools.class"?

Weder noch, sondern wenn dann:

import Prog1Tools.*;
// oder 
import Prog1Tools.IOTools;

dahthai hat geschrieben:

Dann ist mir deine Erklärung mit dem
"...muß auch das aktuelle Verzeichnis . (so es gebraucht wird) im CLASSPATH stehen. " auch noch nicht ganz klar, kannst du darauf nochmal kurz genauer eingehen?

Greetz und ich probieren alles soweit aus, wenn ich wieder daheim bin!
dahthai

Welcher Greetz? Wo kommt der jetzt her? Ein Kollege, Freund?

Gerade bei kleinen Sachen - z.B. Progrämmchen, die nur aus einer Datei bestehen, möchte man sich nicht gerne mit CLASSPATH rumschlagen, sondern kurz und knapp

edit Foo.java
javac Foo.java
java Foo


eintippen.
Das klappt, weil das aktuelle Verzeichnis nach .class-Files durchsucht wird unter Linux. (Unter Win nicht).
Wenn Du jetzt eine Lib, die nicht unter $JAVA_HOME/jre/lib/ext und nicht unter $JAVA_HOME/jre/lib/ liegt referenzierst, brauchst Du einen CP, wie ~/home/dahthai/java/Prog1Tools.zip
Dann mußt Du aber auch das aktuelle Verzeichnis erwähnen:
~/home/dahthai/java/Prog1Tools.zip:.

dahthai

(Themenstarter)
Avatar von dahthai

Anmeldungsdatum:
14. Juli 2005

Beiträge: 101

Hehe, neenee, Greetz ist kein Kollege oder Freund sondern eine spezielle Form, um 'Grüße' zu sagen ...!
Etwas unglücklich formuliert!

Dank Dir, aber jetzt nochmal fix der Umkehrschluss:
Wie du mir bestätigt hast, ist mein Eintrag in der /.bashrc korrekt, aber wieso zeigt mir dann javac an, daß "Package IOTools does not exist"?
😕

Aber ich bin gleich daheim und probiere alles soweit aus!
So, nochmal:

Greetz,
dahthai

dahthai

(Themenstarter)
Avatar von dahthai

Anmeldungsdatum:
14. Juli 2005

Beiträge: 101

Yoh!!!

Alles funktioniert bestens!!!
Ich danke und werde es mal mit HelloWorld Teil2 versuchen!
🤣

Greetz,
Tilo

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

dahthai hat geschrieben:

...aber wieso zeigt mir dann javac an, daß "Package IOTools does not exist"?

Weil es kein Package IOTools gibt.
Wenn ich es recht in Erinnerung habe, dann heißt das package Prog1Tools, und die Klasse heißt Prog1Tools.IOTools.
Verwendet man import Prog1Tools.*;, dann kann man die Klasse mit Ihrem Kurznamen IOTools ansprechen.

Auch wenn es klappt schadet es nicht, zu wissen, wieso.

WRson

Anmeldungsdatum:
16. November 2014

Beiträge: Zähle...

EDIT: Habe es hinbekommen!

Hallo liebe Ubuntuuser,

habe mich soeben im Forum angemeldet, weil ich das genau gleiche Problem habe, welches in diesem Thread bereits gelöst wurde. Leider schaffe ich es einfach nicht! Eclipse konnte vorher einmal kurz ein Testprogramm mit den Progtools ausführen, inzwischen geht das auch nicht mehr und die Konsole streikt bei der ausgabe sowieso.

Alles was bisher gemacht wurde, ist die Prog1Tools.zip heruntergeladen, in prog1tools.zip umbenannt und in meine /home/username/workspace verschoben. In eclipse habe ich sie zu den verwendeten jre's hinzugefügt, meine .bashrc ist auch bereits mit der Formel

 #iotools
	CLASSPATH=.:~/home/fox/workspace/prog1tools.zip:$CLASSPATH;
	export CLASSPATH

versehen und gibt auch in der Konsole

echo $CLASSPATH
.:/home/username/home/username/workspace/prog1tools.zip:

aus. Wieso zwei mal home und username vorkommt kann ich mir nicht erklären. Des weiteren gibt es bei mir kein $JAVA_HOME Verzeichnis in welches ich die Progtools kopieren könnte.

Hier noch die konkrete Fehlermeldung des Konsole:

progtools.java:1: error: package Prog1Tools does not exist
import Prog1Tools.IOTools;
                 ^
progtools.java:9: error: cannot find symbol
		int a = IOTools.readInteger();
		        ^
  symbol:   variable IOTools
  location: class progtools
2 errors

Ich hoffe ihr könnt mir helfen! Danke jetzt schon WRson

Bearbeitet von rklm:

Herzlich willkommen hier im Forum! Codeblöcke hinzugefügt. Bitte die Hinweise zur Syntax beachten und die Vorschaufunktion nutzen.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

1
2
3
4
> progtools.java:1: error: package Prog1Tools does not exist
> import Prog1Tools.IOTools;
>                  ^
> progtools.java:9: error: cannot find symbol

Paketnamen sollen immer klein geschrieben werden. Außerdem muss die Schreibweise der des Verzeichnisnamens entsprechen - heißt das Verzeichnis denn Prog1Tools oder prog1Tools?

Antworten |