methode in anderer java datei aufrufen

Status
Nicht offen für weitere Antworten.

EagleEye

Bekanntes Mitglied
wie kann ich eine methode in einer anderen java datei aufrufen und muß ich der datei irgendwas besonderes beachtet werden damit das geht?
 
zuerst probieren, dann studieren

nein, da ist absolut nichts besonderes, einfach nicht vergessen beide Dateien zu kompilieren :wink:
 
Hallo,

2 Möglichkeiten.

1 Möglichkeit: eine public ( oder wenn die Klassen im selben ordner sind kann sie auch protected sein ) Methode erstellen. z.B.:

Code:
public class QuadratBerechnung
{
    public QuadratBerechnung ()
    {
        //Konstruktor
    }

    public int berechneQuadrat ( int zahl1, int zahl2 )
    {
        return Math.pow ( zahl1, zahl2 );
    } 
}

danach eine Instanz der Klasse erzeugen.

Code:
QuadratBerechnung quadratBerechnung = new QuadratBerechnung ();

//Hier ist jetzt der Aufruf
int ergebnis = quadratBerechnung.berechneQuadrat ( 5,5);

zweite Möglichkeit wäre eine statische Methode einer Klasse aufzurufen
Die Methode könnte in der selben Klasse so lauten:

Code:
public static int quadratBerechnen ( int zahl1, int zahl2 )
{
    return Math.pow ( zahl1, zahl2 );
}

die könntest dann aus der Klasse aus aufrufen
Code:
int ergebnis = QuadratBerechnung.quadratBerechnen ( 4,6 );
 
DreamArtist hat gesagt.:
oder wenn die Klassen im selben ordner sind kann sie auch protected sein
Hm, "Packageintern" heisst das, "protected" ist was anderes (dann können nur abgeleitete Klassen die Methode aufrufen)
 
thx leider spinnt mein java weil es sagt das er das symbol nicht kennt komischerweise auch bei einem prog wo ich schon eine externe datei drin hab(hab die nur nie verstanden) laufen tut die nur kopilieren kann ich die nicht
der rechner will wohl umbedingt sterben :twisted:
 
Öhm, moment mal, das Programm läuft, aber du kannst es nicht kompilieren.

Ist das den nicht irgendwie logisch? Eine *.java Datei wird in eine *.class Datei kompiliert, und die *.class Datei(en) werden dann als Programm benutzt (von der VM interpretiert).

Ich geb dir mal ein kleines Beispiel, wie man das machen kann:


Im Ordner compile\src habe ich die beiden Dateien "Main.java" und "Call.java", mit den Inhalten:

Main.java
Code:
public class Main {
	public static void main( String[] args ){
		Call call = new Call();
		call.print();	
	}
}

Call.java
Code:
public class Call{
	public Call(){
	}
	public void print(){
		System.out.println( "hallo du da");
	}
}

So, und nun kompilieren und laufenlassen
// Inhalt des Ordners src:
E:\Dateien\Java\Projekte04\compile>dir src
Datenträger in Laufwerk E: ist DATEIEN
Volumeseriennummer: 2034-18FB

Verzeichnis von E:\Dateien\Java\Projekte04\compile\src

21.02.2004 18:04 <DIR> .
21.02.2004 18:04 <DIR> ..
21.02.2004 18:02 115 Main.java
21.02.2004 18:02 108 Call.java
2 Datei(en) 223 Bytes
2 Verzeichnis(se), 507'585'611 Bytes frei

// Kompilieren, der Ordner bin muss zuerst von Hand hergestellt werden!
E:\Dateien\Java\Projekte04\compile>c:\j2sdk1.4.2_01\bin\javac -d bin src\*.java

// Inhalt des Ordners bin
E:\Dateien\Java\Projekte04\compile>dir bin
Datenträger in Laufwerk E: ist DATEIEN
Volumeseriennummer: 2034-18FB

Verzeichnis von E:\Dateien\Java\Projekte04\compile\bin

21.02.2004 18:04 <DIR> .
21.02.2004 18:04 <DIR> ..
21.02.2004 18:13 393 Call.class
21.02.2004 18:13 306 Main.class
2 Datei(en) 699 Bytes
2 Verzeichnis(se), 507'584'512 Bytes frei

// Laufenlassen
E:\Dateien\Java\Projekte04\compile>cd bin

E:\Dateien\Java\Projekte04\compile\bin>java Main
hallo du da

E:\Dateien\Java\Projekte04\compile\bin>exit
 
das liegt daran ich hatte das schon vor einigen monaten gemacht das war noch mein erstes grafisches prog
ich glaube aber das liegt an meinem rechner der spinnt bischen rum ich hatte vor einer weile schon ein ähnliches prob als ich habe einen ordern da haben ich mein java prog was ich mache drin als ich ein zweites gemacht hab wollte ich die in unterverzeichnisse machen schon ging es nichtmehr da hatte er immer gesagt das da irgendwelche methoden spinnen komischerweise gings in eclipse na änderung der ordner gings wieder
 
EagleEye hat gesagt.:
das liegt daran ich hatte das schon vor einigen monaten gemacht das war noch mein erstes grafisches prog
ich glaube aber das liegt an meinem rechner der spinnt bischen rum ich hatte vor einer weile schon ein ähnliches prob als ich habe einen ordern da haben ich mein java prog was ich mache drin als ich ein zweites gemacht hab wollte ich die in unterverzeichnisse machen schon ging es nichtmehr da hatte er immer gesagt das da irgendwelche methoden spinnen komischerweise gings in eclipse na änderung der ordner gings wieder

???:L da frag ich mich doch, wo zu es satzzeichen gibt ???:L
 
Hm, ich frag mich eher wie man ein graphische Prog in einer Datei machen kann.., :wink: (zumal die Taschenrechner auf der EagleEyes Homepage doch schon einiges an Code haben müssen)
Wenn EagleEye es auf mehrere Dateien ausgeweitet hätte, würde er die Lösung des Problemes ja schon kennen...

Stimmt da was an meinen Überlegungen nicht ???:L

Beni
 
naja ich kille den rechner gerade weil da einige sachen nicht so ganz rund laufen dann mal sehn wie es dann läuft
 
leider stehe ich gerade wieder vor einem problem
ich habe jetzt mehere dateien geschrieben die gingen auch alle wunderbar nur jetzt will ich aus dem hauptprog aus die farbe der anderen fenster die ich aufgerufen habe ändern
hier mit ruf ich sie auf

Code:
einstellungen.colorset(textfarbe,hintergrundfarbe);

dann wird die ausgeführt
Code:
public static void colorset(Color textfarbe,Color hintergrundfarbe)
  {
//hier werden die farben geändert
}
nur da sagt er mir das

.\about.java:52: non-static variable aboutlabel00 cannot be referenced from a static context

nur ich will die nicht statisch machen weil wenn ich mich richtig erinnere kann man sie dann ja nichtmehr ändern
irre ich mich da vieleicht oder hat da wer ne andere lösung?
wäre euch sehr dankbar 🙂
 
static: Was mit static markiert ist existiert nur einmal, und unabhängig von einem Object (so ungefähr)
final: Was mit final markiert ist, lässt sich nicht mehr verändern. Das gibt Konstanten, Klassen die sich nicht ableiten lassen, Methode die nicht überschrieben werden können.

Versuchs mal mit:
Code:
public void colorset(Color textfarbe,Color hintergrundfarbe){
  //hier werden die farben geändert
}

mfg Beni
 
hab ich auch schon versucht gehabtda kommt dann immer das 🙁

tabelle.java:83: non-static method colorset(java.awt.Color,java.awt.Color) cannot be referenced from a static context
einstellungen.colorset(textfarbe,hintergrundfarbe);

obwohl ich da garnichts static gemacht hab 🙁
 
EagleEye hat gesagt.:
hab ich auch schon versucht gehabtda kommt dann immer das 🙁

tabelle.java:83: non-static method colorset(java.awt.Color,java.awt.Color) cannot be referenced from a static context
einstellungen.colorset(textfarbe,hintergrundfarbe);

obwohl ich da garnichts static gemacht hab 🙁

du darfst dann nicht auf die klasse selbst zugreifen (denn dazu müsste die methode static sein), sondern musst dir ein objekt anlegen, auf dem rufst du dann die methode auf.
 
Code:
einstellungen e = new einstellungen();  // Klassen beginnen normalerweise mit einem Grossbuchstabe : class Einstellungen
e.colorset( ... );
 
Beni hat gesagt.:
DreamArtist hat gesagt.:
oder wenn die Klassen im selben ordner sind kann sie auch protected sein
Hm, "Packageintern" heisst das, "protected" ist was anderes (dann können nur abgeleitete Klassen die Methode aufrufen)
Da widerspreche ich mal ganz dreist. Jedenfalls bei mir funktioniert protected auch bei Klassen im selben package, die eine Klasse muss nicht erbende Klasse der anderen sein !!
 
deathbyaclown hat gesagt.:
Beni hat gesagt.:
DreamArtist hat gesagt.:
oder wenn die Klassen im selben ordner sind kann sie auch protected sein
Hm, "Packageintern" heisst das, "protected" ist was anderes (dann können nur abgeleitete Klassen die Methode aufrufen)
Da widerspreche ich mal ganz dreist. Jedenfalls bei mir funktioniert protected auch bei Klassen im selben package, die eine Klasse muss nicht erbende Klasse der anderen sein !!

dazu verweise ich mal auf die FAQ: http://www.java-forum.org/de/topics/java_1546.html
 
Beni hat gesagt.:
Ich geb dir mal ein kleines Beispiel, wie man das machen kann:

Im Ordner compile\src habe ich die beiden Dateien "Main.java" und "Call.java", mit den Inhalten:

Main.java
Code:
public class Main {
	public static void main( String[] args ){
		Call call = new Call();
		call.print();	
	}
}

Call.java
Code:
public class Call{
	public Call(){
	}
	public void print(){
		System.out.println( "hallo du da");
	}
}

So, und nun kompilieren und laufenlassen
// Inhalt des Ordners src:
E:\Dateien\Java\Projekte04\compile>dir src
Datenträger in Laufwerk E: ist DATEIEN
Volumeseriennummer: 2034-18FB

Verzeichnis von E:\Dateien\Java\Projekte04\compile\src

21.02.2004 18:04 <DIR> .
21.02.2004 18:04 <DIR> ..
21.02.2004 18:02 115 Main.java
21.02.2004 18:02 108 Call.java
2 Datei(en) 223 Bytes
2 Verzeichnis(se), 507'585'611 Bytes frei

// Kompilieren, der Ordner bin muss zuerst von Hand hergestellt werden!
E:\Dateien\Java\Projekte04\compile>c:\j2sdk1.4.2_01\bin\javac -d bin src\*.java

// Inhalt des Ordners bin
E:\Dateien\Java\Projekte04\compile>dir bin
Datenträger in Laufwerk E: ist DATEIEN
Volumeseriennummer: 2034-18FB

Verzeichnis von E:\Dateien\Java\Projekte04\compile\bin

21.02.2004 18:04 <DIR> .
21.02.2004 18:04 <DIR> ..
21.02.2004 18:13 393 Call.class
21.02.2004 18:13 306 Main.class
2 Datei(en) 699 Bytes
2 Verzeichnis(se), 507'584'512 Bytes frei

// Laufenlassen
E:\Dateien\Java\Projekte04\compile>cd bin

E:\Dateien\Java\Projekte04\compile\bin>java Main
hallo du da

E:\Dateien\Java\Projekte04\compile\bin>exit

Wenn ich das so mache, bekomme ich beim ausführen Folgende Fehlermeldung:
(Im Ordner "C:\Java\test" liegen die beiden Dateien).


Ausschnitt aus der Eingabeaufforderung von Win
---------------------------------------------------------------------------------------
C:\Java>javac test\*.java
C:\Java>
C:\Java\test>java Main
Exception in thread "main" java.lang.NoClassDefFoundError: Main
----------------------------------------------------------------------------------------

In die Api hab ich schon geschaut, aber was da steht, sagt der Fehlertext ja schon aus. Was mach ich denn falsch?

Nino
 
Hast Du deiner Main-Klasse noch ein Package zugewiesen?
Etwas wie hier?
Code:
package test;

public class Main {
   public static void main( String[] args ){
      ...
   }
}

Wenn ja: starte mit c:\Java> java test.Main (denn Pfad zur Datei und Package-Angabe müssen übereinstimmen)
Wenn nein: Poste doch Klassentext, und die ganzen Aufrufe die du in der Konsole machst. (Damit man's ausprobieren kann).

mfg Beni
 
Ich habe die Dateien genau von deinem Beitrag kopiert und habe keinen Code hinzugefügt.

In dem Ordner "C:\Java\test" liegen die beiden Dateien "Main.java" und "Class.java".
Dann starte ich die Eingabeaufforderung:
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.

C:\Dokumente und Einstellungen\nino1>cd..

C:\Dokumente und Einstellungen>cd..

C:\>cd java

C:\Java>javac test\*.java

C:\Java>cd test

C:\Java\test>java Main
Exception in thread "main" java.lang.NoClassDefFoundError: Main

C:\Java\test>

Ich hab dann mal was ausprobiert und statt
C:\Java\test>java Main
das hier geschrieben:
C:\Java\test>java EgalWasHierSteht
Dann bekam ich folgende Fehlermeldung:
Exception in thread "main" java.lang.NoClassDefFoundError: EgalWasHierSteht
 
Hm, also ich habe nicht geschummelt...
Die beiden *.class - Dateien existieren? wo?
 
Naja die liegen auch im Ordner "C:\Java\test":

Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.

C:\Java>dir test
Datenträger in Laufwerk C: hat keine Bezeichnung.
Datenträgernummer: C464-0332

Verzeichnis von C:\Java\test

26.02.2004 17:06 <DIR> .
26.02.2004 17:06 <DIR> ..
26.02.2004 17:06 393 Call.class
26.02.2004 16:21 127 Call.java
26.02.2004 17:06 306 Main.class
26.02.2004 15:34 135 Main.java
4 Datei(en) 961 Bytes
2 Verzeichnis(se), 2.548.817.920 Bytes frei

C:\Java>cd test

C:\Java\test>java Main
Exception in thread "main" java.lang.NoClassDefFoundError: Main

C:\Java\test>
 
keine Ahnung ob das schon gecheckt wurde - aber worauf zeigt dein CLASSPATH ?
 
Ok, Entwarnung!
Es lag daran, dass unter Win2000 bei mir der ClassPath den namen PATH trug. Da hatte ich auch den Pfad zur java.exe eingetragen.
Nun hatte aber ein anderes Programm (ohne mein Wissen) ebenfalls eine Umgebungsvariable mit dem Namen "CLASSPATH" angelegt. Nachdem ich diese Umgebungsvariable gelöscht hab, geht alles wieder.

Danke für eure Mühe...

Nino
 
hmm irgendwas geht bei mir immer noch nicht er meckert rum das er jetzt einstellungen nicht kennt
aber ich lasse das erstmal sein und mache ein anders prog fertig das ich wegen prüfungen zurückgestellt hatte und kümmere mich um das problem später nochmal
danke für eure hilfe soweit 8)
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben