# methode in anderer java datei aufrufen



## EagleEye (21. Feb 2004)

wie kann ich eine methode in einer anderen java datei aufrufen und muß ich der datei irgendwas besonderes beachtet werden damit das geht?


----------



## Beni (21. Feb 2004)

zuerst probieren, dann studieren

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


----------



## DreamArtist (21. Feb 2004)

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.:


```
public class QuadratBerechnung
{
    public QuadratBerechnung ()
    {
        //Konstruktor
    }

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

danach eine Instanz der Klasse erzeugen.


```
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:


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

die könntest dann aus der Klasse aus aufrufen

```
int ergebnis = QuadratBerechnung.quadratBerechnen ( 4,6 );
```


----------



## Beni (21. Feb 2004)

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)


----------



## EagleEye (21. Feb 2004)

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:


----------



## Beni (21. Feb 2004)

Ö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
	
	
	
	





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

Call.java
	
	
	
	





```
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
> ...


----------



## EagleEye (21. Feb 2004)

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


----------



## bummerland (21. Feb 2004)

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


----------



## Beni (21. Feb 2004)

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


----------



## EagleEye (21. Feb 2004)

naja ich kille den rechner gerade weil da einige sachen nicht so ganz rund laufen dann mal sehn wie es dann läuft


----------



## EagleEye (22. Feb 2004)

so nach dem ich den rechner gekillt hab gehts jetzt alles schön 
danke für die hilfe


----------



## EagleEye (24. Feb 2004)

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


```
einstellungen.colorset(textfarbe,hintergrundfarbe);
```

dann wird die ausgeführt

```
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


----------



## Beni (24. Feb 2004)

*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:
	
	
	
	





```
public void colorset(Color textfarbe,Color hintergrundfarbe){
  //hier werden die farben geändert
}
```

mfg Beni


----------



## EagleEye (24. Feb 2004)

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


----------



## bummerland (24. Feb 2004)

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);
> ...



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.


----------



## Beni (24. Feb 2004)

```
einstellungen e = new einstellungen();  // Klassen beginnen normalerweise mit einem Grossbuchstabe : class Einstellungen
e.colorset( ... );
```


----------



## bygones (24. Feb 2004)

Beni hat gesagt.:
			
		

> DreamArtist hat gesagt.:
> 
> 
> 
> ...


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 !!


----------



## bummerland (24. Feb 2004)

deathbyaclown hat gesagt.:
			
		

> Beni hat gesagt.:
> 
> 
> 
> ...



dazu verweise ich mal auf die FAQ: http://www.java-forum.org/de/topics/java_1546.html


----------



## Beni (24. Feb 2004)

... ein Pflock durch mein Herz, *aarghh* *tod umfall*


----------



## Nino (26. Feb 2004)

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:
> 
> ...



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


----------



## Beni (26. Feb 2004)

Hast Du deiner Main-Klasse noch ein Package zugewiesen?
Etwas wie hier?
	
	
	
	





```
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


----------



## Nino (26. Feb 2004)

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..
> ...



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


----------



## Beni (26. Feb 2004)

Hm, also ich habe nicht geschummelt...
Die beiden *.class - Dateien existieren? wo?


----------



## Nino (26. Feb 2004)

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
> ...


----------



## bygones (26. Feb 2004)

keine Ahnung ob das schon gecheckt wurde - aber worauf zeigt dein CLASSPATH ?


----------



## Nino (26. Feb 2004)

Mein Path zeigt auf "... ;C:\j2sdk1.4.2_03\bin"


----------



## Nino (26. Feb 2004)

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


----------



## EagleEye (26. Feb 2004)

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)


----------

