Aufruf von statischen Methoden einer anderen Klasse

Hallo zusammen

Ich versuche aus der main-class statische Methoden einer anderen class aufzurufen, erhalte aber beim Kompilieren die Fehlermeldung "cannot find symbol". Ich weiss, dass das auf eine fehlende Deklarierung hindeutet. Aber bei statischen Methoden braucht es doch keine Instanz der Klasse, die diese Methode hat, oder?

Die Klasse Functions liegt im gleichen Ordner, sollte als keinen Pfad benötigen. Auch import ist mE unnötig, hab' ich trotzdem getestet, macht keinen Unterschied.

In der class Functions meckert die IDE "The public type Functions must be defined in its own file Java(16777541)", kompiliert wird aber trotzdem anstandslos.

Was überlege ich falsch?
Danke für eure Hilfe.

[CODE lang="java" title="class Master"]package Kapitel35_Autohof;

public class Master {
public static void main(String args[]){

String test1 = Functions.askUser4words("Wie heisst du?");
int test2 = Functions.askUser4values("Welche Zahl willst du?");

System.out.println(
"Hallo "+test1+
"\nDu hast "+test2+" eingetippt.");
}
}[/CODE]
[CODE lang="java" title="class Functions"]package Kapitel35_Autohof;
import java.util.Scanner;

public class Functions {

public static String askUser4words (String question){
System.out.println(question);
Scanner askUser = new Scanner(System.in);
String answer = askUser.nextLine().trim();
askUser.close();
return answer;
}

public static int askUser4values (String question) {
System.out.println(question);
Scanner askUser = new Scanner(System.in);
int answer = askUser.nextInt();
askUser.close();
return answer;
}
}
[/CODE]
 

mihe7

Top Contributor
Mach mal ein Rebuild (Clean & Build) vom Projekt. Cannot find Symbol kann hier nicht sein. Das funktioniert wunderbar (wenn man von einem Laufzeitfehler, den Du nach der Eingabe des Namens bekommen wirst, weil Du den Scanner und damit System.in schließt)
 
K

kneitzel

Gast
Wie übersetzt Du denn die Dateien? Wenn Du es auf der Kommandozeile machst, dann kannst Du z.B. beider Dateien angeben. Oder es muss erst Functions.java übersetzt werden und bei der Übersetzung der zweiten Datei muss die class Datei von Functions im sogenannten classpath sein.
 
@mihe7 : Danke für den Tipp!
Das Scanner-Problem hab' ich bereits auf dem Radar, schau' ich mir später an.

Hmm, diese neue, vereinfachte Variante klappt tadellos:
[CODE lang="java" title="class Master"]public class Master {
public static void main(String[] args) {
System.out.println("du hast "+UI_functions.getNumber()+" eingetippt.");
}
}[/CODE]
Java:
import java.util.Scanner;

public class UI_functions {
    public static int getNumber(){
        System.out.println("Gib ne Zahl ein.");
        Scanner input = new Scanner (System.in);
        return input.nextInt();
    }
}

Da bin ich schon mal beruhigt, dass mein Fehler nicht beim Verständnis static class/method entstanden ist ;-)

Was könnte bei der ursprünglichen Variante die Fehlerursache sein?
 
Wie übersetzt Du denn die Dateien? Wenn Du es auf der Kommandozeile machst, dann kannst Du z.B. beider Dateien angeben. Oder es muss erst Functions.java übersetzt werden und bei der Übersetzung der zweiten Datei muss die class Datei von Functions im sogenannten classpath sein.
In Visual Studio Code (mehr Info unten) tipp' ich "javac Master.java". So viel ich weiss, werden die in Master.java aufgerufenen Klassen automatisch mitkompiliert, es hat nämlich danach jeweils die entsprechenden *.class-files.

Infos zu meiner IDE:
Version: 1.55.1 (user setup)
Commit: 08a217c4d27a02a5bcde898fd7981bda5b49391b
Datum: 2021-04-07T15:06:02.360Z
Electron: 11.3.0
Chrome: 87.0.4280.141
Node.js: 12.18.3
V8: 8.7.220.31-electron.0
Betriebssystem: Windows_NT x64 10.0.19041
 

mihe7

Top Contributor
javac -cp . Functions.java
javac -cp . Master.java
oder kurz
javac -cp . *.java
bzw. hier auch einfach
javac *.java
 
@mihe7 : Danke. Ich kann mit javac *.java zwar alles auf einen Schlag kompilieren, aber die Fehlermeldung "cannot find symbol" bleibt (in der ursprünglichen Variante).

Aber; ich hatte soeben noch ne Idee; Ordner auf Desktop kopiert und Ordnername verkürzt; siehe da, es klappt.
Mögliche Fehlerursachen:
  1. zu lange Adresse: D:\*\*\Programmierung 2\Java Tutorial\Kapitel35_Autohof
  2. Name des Orders: Sind underscores ein Problem?
Danke jedenfalls für eure Hilfe!

Nachtrag: der underscore (_) war's. Änderung hat das Problem gelöst.
 
K

kneitzel

Gast
Ok, meine Vermutung:
Du bist in das Verzeichnis Kapitel35_Autohof gegangen und hast da ein javac Master.java aufgerufen.
==> Er findet Function nicht, weil die Verzeichnisstruktur nicht passt.

Ja, er versucht, ein Function.java zu finden, aber das ist im Package Kapitel35_Autohof, d.h. er will ein .\Packag35_Autohof\Functions.java übersetzen. das gibt es aber nicht.

Ein javac *.java funktionierte in meinen Tests, da er da die Klasse trotz falschem Pfad finden konnte.

Der Fehler ist, dass du es im falschen Verzeichnis aufrufst. Das Source Verzeichnis ist bei Die das Java Tutorial Verzeichnis. Entweder Du rufst es von dort auf oder du setzt den Pfad mit -src.
javac Kapitel35_Autohof\Master.java

Das wäre, was ich mir zusammen gereimt habe aus den Angaben.
 
Ok, meine Vermutung:
Du bist in das Verzeichnis Kapitel35_Autohof gegangen und hast da ein javac Master.java aufgerufen.
==> Er findet Function nicht, weil die Verzeichnisstruktur nicht passt.

Ja, er versucht, ein Function.java zu finden, aber das ist im Package Kapitel35_Autohof, d.h. er will ein .\Packag35_Autohof\Functions.java übersetzen. das gibt es aber nicht.

Ein javac *.java funktionierte in meinen Tests, da er da die Klasse trotz falschem Pfad finden konnte.

Der Fehler ist, dass du es im falschen Verzeichnis aufrufst. Das Source Verzeichnis ist bei Die das Java Tutorial Verzeichnis. Entweder Du rufst es von dort auf oder du setzt den Pfad mit -src.
javac Kapitel35_Autohof\Master.java

Das wäre, was ich mir zusammen gereimt habe aus den Angaben.
das klingt passend, auch deine Vermutung ist zutreffend.

Allerdings hatte der Aufruf aus dem Unterverzeichnis (=Kapitel35) das gewünschte Resultat:
PS D:\*\*\Programmierung 2\Java Tutorial\Kapitel35> javac Master.java
PS D:\*\*\Programmierung 2\Java Tutorial\Kapitel35> java Master
Wie heisst du?
dfdf
Welche Zahl willst du?
Exception in thread "main" java.util.NoSuchElementException
...

Beide files (Master.java und Function.java) sind im Ordner Kapitel35, es gibt darin keine Unterordner.

Ich habe noch einen wichtigen Punkt vergessen zu erwähnen;
package Kapitel35_Autohof; habe ich in beiden files auskommentiert. Wenn ich das nicht mache, erhalte ich wieder dieselbe Fehlermeldung.
Also trifft @kneitzel wohl doch ins Schwarze ;-)
 
K

kneitzel

Gast
Ja, vermutlich, wobei dann nicht der Underscore sondern jedes Verzeichnis ein Problem darstellen müsste.
Weder die Verzeichnislänge noch der Underscore sind das Problem.

Das Problem ist der Aufruf aus dem falschen Verzeichnis und die Angabe der Dateien nicht mit vollem, richtigen Namen.

Wenn das Package p1.p2 ist und die Klasse Klasse heisst, dann ist die Datei p1\p2\Klasse.java und sollte so angegeben werden.
 
K

kneitzel

Gast
Ja, Das Zitat war evtl. ungeschickt gewählt. Mir ging es auch mehr darum, eben diesen zwei Vermutungen vom TE noch einmal deutlich entgegen zu treten und die Ursache deutlich zu beschreiben.

Wie von Dir geschrieben wird das Problem mit jedem Verzeichnis / Package auftreten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Aufruf einer statischen Variable Java Basics - Anfänger-Themen 1
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
K Erste Schritte Stream-Aufruf vereinfachen Java Basics - Anfänger-Themen 3
sashady ursprüngliche Array-Werte bei erneutem Aufruf? Java Basics - Anfänger-Themen 7
Y Aufruf von Methode nicht möglich. Java Basics - Anfänger-Themen 2
D Aufruf von mehreren Activities bringt die app zum Absturz Java Basics - Anfänger-Themen 5
L Methoden Wie Löse ich ext Methoden Aufruf Fehler? Java Basics - Anfänger-Themen 3
X Methode bei mehrfachen Aufruf kein Effekt Java Basics - Anfänger-Themen 3
H Aufruf von Methoden durch Methoden Java Basics - Anfänger-Themen 3
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
O Verwirrt beim Java Collection Framework aufruf! Java Basics - Anfänger-Themen 9
T Konsolenscanner startet nicht durch Aufruf von Actionlistener Java Basics - Anfänger-Themen 4
B OOP While Schleife läuft Endlos durch externen aufruf Java Basics - Anfänger-Themen 2
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
D Interface Wieso Aufruf aller Methoden eines Interfaces? Java Basics - Anfänger-Themen 11
R Methoden NPE beim Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 4
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
H Rekursiver Aufruf Java Basics - Anfänger-Themen 8
E Daten dem Super Aufruf übergeben Java Basics - Anfänger-Themen 3
D Interface Frame doppelt durch Aufruf der GUI Klasse Java Basics - Anfänger-Themen 1
Henri Aufruf von getX() und getY() aus der Super klasse Objekt() Java Basics - Anfänger-Themen 3
E Aufruf auf Objekt mit übergebenem Wert? Java Basics - Anfänger-Themen 7
D Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 39
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
M Speichern von Objekten - Verfügbarkeit bei erneutem Aufruf Java Basics - Anfänger-Themen 3
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
P Aufruf Methode anderer Klasse Java Basics - Anfänger-Themen 5
J Klassen Reihenfolge beim Aufruf von Klassen Java Basics - Anfänger-Themen 1
V Problem Aufruf einer Methode in einer Methode Java Basics - Anfänger-Themen 1
O Frage zum Aufruf überladener Methoden Java Basics - Anfänger-Themen 4
G funktions Aufruf aus GUI Java Basics - Anfänger-Themen 9
A Fehlermeldung beim aufruf der main Methode Java Basics - Anfänger-Themen 17
I Rückgabe und Aufruf einer Methode innerhalb einer anderen Methode Java Basics - Anfänger-Themen 5
W Zeitversetzter Aufruf der Methoden Java Basics - Anfänger-Themen 6
M Unbekannte Nummer bei Aufruf der toString Methode Java Basics - Anfänger-Themen 3
D Methode mit mehren Rekursiven aufrufen in Methode mit einem Rekursiven Aufruf umwandeln! Java Basics - Anfänger-Themen 1
F signiertes Applet fkt. nicht bei lokalem Aufruf Java Basics - Anfänger-Themen 2
A externer repaint Aufruf Java Basics - Anfänger-Themen 9
H Aufruf einer Instanzmethode funktionert nicht. Java Basics - Anfänger-Themen 6
A Konstruktor Aufruf Java Basics - Anfänger-Themen 4
Pentalon Ein Aufruf den ich nicht verstehe Java Basics - Anfänger-Themen 11
D dynamischer Aufruf Java Basics - Anfänger-Themen 2
N Aufruf der Methode Java Basics - Anfänger-Themen 16
L Next()-Aufruf zweimal innerhalb einer While-Schleife bei ListIterator Java Basics - Anfänger-Themen 10
S Aufruf Einer Methode aus einer anderen Klasse - Static Fehler Java Basics - Anfänger-Themen 4
A Aufruf der paint() Methode Java Basics - Anfänger-Themen 3
K Problem beim Array aufruf Java Basics - Anfänger-Themen 4
P URL für Lokalen Aufruf Java Basics - Anfänger-Themen 5
C OOP Aufruf von Methoden höherer Sichtbarkeit Java Basics - Anfänger-Themen 10
T Client-Fenster bei Aufruf unvollständig Java Basics - Anfänger-Themen 12
S Überladener Konstruktor und aufruf aus eigener Klasse Java Basics - Anfänger-Themen 2
A Aufruf von Konstruktor aus Basisklasse Java Basics - Anfänger-Themen 7
O OOP super aufruf 2 objekte? Java Basics - Anfänger-Themen 3
D Array Methoden Aufruf. Java Basics - Anfänger-Themen 14
L Klassen Aufruf einer ueberschreibbaren Methode im Konstruktor Java Basics - Anfänger-Themen 4
M OOP Aufruf vieler Getter Methoden abkürzen? Java Basics - Anfänger-Themen 7
Q Aufruf einer Klasse in einem Package Java Basics - Anfänger-Themen 7
C Aufruf funktioniert nicht Java Basics - Anfänger-Themen 10
T Aufruf einer Methoden aus einer Util-Klasse mit privatem Konstruktor Java Basics - Anfänger-Themen 7
G Aufruf externer Funktionen Java Basics - Anfänger-Themen 7
C Exception beim Aufruf einer Methode Java Basics - Anfänger-Themen 2
A Aufruf einer Methode Java Basics - Anfänger-Themen 3
J Aufruf von Funktionen in *.jar mittels Eclipse Java Basics - Anfänger-Themen 4
T Shell Script Aufruf mit Java Java Basics - Anfänger-Themen 7
R Aufruf statische Methode Java Basics - Anfänger-Themen 7
M Aufruf zum Objekt erstellen aus String Java Basics - Anfänger-Themen 5
K OOP Nachteil bei direktem Aufruf von run() auf Thread-Objekten Java Basics - Anfänger-Themen 2
J Aufruf der Methode Java Basics - Anfänger-Themen 6
P OOP Aufruf eines Interfaces Java Basics - Anfänger-Themen 4
E Konstruktor-Aufruf Java Basics - Anfänger-Themen 9
C Aufruf einer Funktion Java Basics - Anfänger-Themen 3
W Multiplikation mit rekursivem Aufruf Java Basics - Anfänger-Themen 17
C exec Aufruf mit Leerzeilen im Pfad Java Basics - Anfänger-Themen 3
L Methoden aufruf Java Basics - Anfänger-Themen 3
M methoden aufruf klappt nicht Java Basics - Anfänger-Themen 6
M Frage zum Aufruf eines Applets aus einer HTML - Datei Java Basics - Anfänger-Themen 3
N Methoden aufruf Java Basics - Anfänger-Themen 7
K Methoden aufruf von einer anderen Klasse Java Basics - Anfänger-Themen 7
S super() aufruf ausgabe Java Basics - Anfänger-Themen 3
L Mehrere Objekte einer Klasse aber nur einmal Konstruktor aufruf? Java Basics - Anfänger-Themen 2
M Probleme beim Aufruf von Listener in anderer Klasse Java Basics - Anfänger-Themen 9
F Aufruf von Methoden hintereinander gechachtelt??? Java Basics - Anfänger-Themen 8
E Mehrfache print ausgabe ohne Schleife oder Rekursiven aufruf? Java Basics - Anfänger-Themen 48
radiac CMD Windowskonsole und java aufruf in Vista 64 Java Basics - Anfänger-Themen 2
D Aufruf von WGET aus Java Java Basics - Anfänger-Themen 5
F Variabler Aufruf einer Methode Java Basics - Anfänger-Themen 10
F Methoden Aufruf Java Basics - Anfänger-Themen 4
L abgeleitete Klasse - Aufruf mit vererbter Klasse? Java Basics - Anfänger-Themen 2
T aufruf methode in methode macht probleme Java Basics - Anfänger-Themen 9
P seltsamer konsolen aufruf Java Basics - Anfänger-Themen 8
E Frage zum Objekt aufruf Java Basics - Anfänger-Themen 3
A Aufruf einer externen schon laufenden Anwendung Java Basics - Anfänger-Themen 3
C Aufruf eines Java Programms aus einem anderen Java Programm Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben