Zwei Klassen, zwei Dateien

  • Themenstarter Themenstarter Vivi
  • Beginndatum Beginndatum
V

Vivi

Gast
Hallo,
das ist jetzt sicher eine total einfache Frage, aber irgendwie stehe ich gerade total auf dem Schlauch 🙁.

Ich habe zwei Klassen, die ich in zwei Dateien haben. In der einen class ist meine main-Funktion, die die zweite Klasse aufruft. Wie spreche ich die zweite Klasse korrekt an? Diese Zweite kann ich fehlerfrei kompilieren, bei der 1. tritt immer ein Fehler auf.

Die 1. Klasse mit Main-Funktion:
Java:
public class Test
{
	public static void main( String[] args )
	{
		Test1 test1 = new Test1 ();
		test1.ausgabe();
	}
}

Die 2. Klasse, die angesprochen werden soll:
Java:
public class Test1
{
	public Test1()
	{
	}

	static void ausgabe(int n)
	{
		String t = javax.swing.JOptionPane.showInputDialog("Please enter your name:");
		String[] name = t.split(" ");
		System.out.print("Your Prename is "+name[0]+" and your surname's "+name[1]+".");
	}
}

Und die Fehlernachricht:
----------
1. ERROR in Test.java (at line 5)
Test1 test1 = new Test1 (); //das erste Test1 weißt Fehler auf
^^^^^
Test1 cannot be resolved to a type
----------
2. ERROR in Test.java (at line 5)
Test1 test1 = new Test1 (); //das hintere Test1 ist fehlerhaft
^^^^^
Test1 cannot be resolved to a type
----------
2 problems (2 errors)

Für jegliche Hilfe bin ich dankbar!

Liebe Grüße
Vivi
 
Wenn ausgabe() einen Parameter n hat, solltest du diesen auch mitgeben...

Außerdem braucht man für eine statische Methode keine Instanz (auch wenn es so funktionieren sollte).
 
Der Fehler kommt, wenn ich mit < javac Test.java > kompiliere. Also die Datei mit der Main-Funktion.

Danke für die Erinnerung an die Übergabe, habe jetzt den Übergabewert gelöscht, da dieser ohnehin nicht gebraucht wird (also kein < int n > mehr).
 
Sorry für den Doppelpost, zu spät gesehen:

Was für ein ClassPath? Was ist das?
Vielleicht liegt hier das Problem?

Die beiden Dateien liegen im selben Ordner.
 
http://service.phil-fak.uni-duesseldorf.de/tutorial/java/SelfJAVA/java0034.htm hat gesagt.:
Über die CLASSPATH Variable finden die JDK Werkzeuge und die Applikationen die Klassenbibliotheken. Sie wird nur dann benötigt, wenn sich Bibliotheken nicht im JDK Installationsverzeichnis bzw. im aktuellen Verzeichnis befinden. Ab der JDK Version 1.2.2 hat die Java Platform einen zusätzlichen Mechanismus (extension mechanism) eingebaut, um Bibiliotheken zu finden.

Anstelle der CLASSPATH Variablen kann bei den JDK Werkzeugen auch der Schalter -classpath verwendet werden. Dieser Schalter wird oft bevorzugt, denn er erlaubt die Pfade für verschiedene Applikationen indiviuell zu setzen, ohne das andere Applikationen davon beeinflusst werden.

Am CLASSPATH kann es also leider nicht liegen... Normales kompilieren funktioniert ja auch, nur eben mit diesem Aufruf einer anderen Klasse nicht.
Der Fehler hat sich im Übrigen nicht geändert, nachdem ich den Übergabewert entfernt habe (sollte er auch nicht 😉).

Freue mich über eine Lösung!
 
Ohne Instanz
Java:
public class Test
{
	public static void main( String[] args )
	{
		Test1.ausgabe();
	}
}

und ohne Übergabewert n
Java:
public class Test1
{
	public Test1()
	{
	}

	static void ausgabe()
	{
		String t = javax.swing.JOptionPane.showInputDialog("Please enter your name:");
		String[] name = t.split(" ");
		System.out.print("Your Prename is "+name[0]+" and your surname's "+name[1]+".");
	}
}

erhalte ich leider denselben Fehlercode, diesmal natürlich nur auf das einzelne Test1 bezogen. Ich nehme an, dass er die Datei aus irgendwelchen Gründen nicht finden/aufrufen kann.
Allerdings komme ich nicht dahinter, woran das liegen könnte...
----------
1. ERROR in Test.java (at line 5)
Test1.ausgabe();
^^^^^
Test1 cannot be resolved
----------

P.S.: Wenn das ein Mod in einen Post schreiben könnte (tut mir Leid), wäre das super!
 
Da ich ausschließliche mit IDE's arbeite, tätige ich keinen manuellen kompileraufruf, aber reicht es hier aus, nur die Datei anzugeben, die die main enthält?!
[c] javac Test.java [/c]
Wenn das der Kompileraufruf ist, könnte ich mir vorstellen, dass hier schon der Fehler liegt. Ich würde dir zu einer (oder zwei 😀 ) IDE raten (Eclipse und/oder Netbeans).
 
Ich habe ein wenig weitergegooglet und da fiel mir im Zusammenhang mit C Makefiles ein, die unter Eclipse verwendet werden müssen. Allerdings können in C Auslagerungsdateien auch ohne Makefile integriert werden (erst die Auslagerung kompilieren, dann die Main-Datei). Genau dies möchte ich unter Java realisieren, falls das möglich ist.

Stimmt es also, dass mein Problem mit dem Kompilieren an einem fehlenden Makefile liegen könnte? Und wenn ja, kann ich auch ordentlich ohne Makefile kompilieren wie es unter C funktioniert?
 
Also nachdem ich mir das nicht vorstellen konnte, dass es lt. deinen Angaben nicht funktioniert, habe ich es selbst getestet.

Das Resultat:
unbenanntbhwd.jpg


Also irgendwas machst du falsch! Hast du die Groß- und Kleinschreibung sowohl in der Shell als auch bei den Dateinamen beachtet?
 
Ich habe ein wenig weitergegooglet und da fiel mir im Zusammenhang mit C Makefiles ein, die unter Eclipse verwendet werden müssen. Allerdings können in C Auslagerungsdateien auch ohne Makefile integriert werden (erst die Auslagerung kompilieren, dann die Main-Datei). Genau dies möchte ich unter Java realisieren, falls das möglich ist.

Stimmt es also, dass mein Problem mit dem Kompilieren an einem fehlenden Makefile liegen könnte? Und wenn ja, kann ich auch ordentlich ohne Makefile kompilieren wie es unter C funktioniert?

nein, du brauchst keine make files
 
Ich danke dir, dass du dir so viel Zeit genommen hast!

Ich bin ja auch der Meinung, dass das funktionieren sollte, deswegen bin ich ja schon halb am Verzweifeln 🙁.
Dank deiner Idee habe ich jetzt auch mal Screenshots gemacht, du kompilierst ja sogar nur die Main-Datei, wie ich gerade sehe, allerdings mit Pfadangabe... hm...

Im Zitat oben steht jedoch, dass die Pfadangabe irrelevant sein soll, wenn sich die Klassen im selben Ordner wie die Main-Datei befinden (das ist hier ja der Fall).

ordnerv.jpg

terminala.jpg


Test1.java kompiliert, wie gesagt, Test.java allerdings nicht.
 
Die Pfadangabe, die ich da mache, ist die Pfadangabe zur JDK und wird natürlich benötigt. Denke allerdings, dass das bei dir nicht das Problem sein kann, weil sonst würde "Der Befehl "javac" ist entweder falsch geschrieben oder
konnte nicht gefunden werden." kommen.
 
Danke! Ich bin schon einmal beruhigt, dass ich kein Makefile brauchen werde!

So, einmal mit dem Befehl < -verbose >:
verbose.jpg


Sagen tut mir das jetzt allerdings nicht; hoffentlich kannst du (oder jemand anderes) dabei weiterhelfen, ARadauer.

Und nein, die Fehlermeldung mit der Pfadangabe bekomme ich ja zum Glück nicht...
 
Und wie ändere ich es, wenn es nun wirklich am CLASSPATH liegt? Alle anderen Dateien lassen sich ja auch kompilieren und ausführen, nur diese mit dem Klassenaufruf (Test1.java) nicht (deswegen verstehe ich das mom. nicht. An die Javabibliotheken muss er ja auch so kommen, um z.B. die Dialogfunktion zu kompilieren und die funktioniert bei mir, wenn ich die zweite Klasse in die Main schreibe (also die Anweisungen in die Main von Test.java).
 
Ich hab hier nur ein WinSystem.
Aber angenommen beide java-Files liegen in C:\Projekte\Test dann müsste der Aufruf so aussehen:
Code:
javac.exe -classpath C:\Projekte\Test C:\Projekte\Test\Test.java
bzw. wenn man vorher ins entsprechende Verzeichnis wechselt:
Code:
javac.exe -classpath C:\Projekte\Test Test.java
 
ich hab das gerade eben auch mal getestet. Ich musste nichts am Classpath ändern/eingeben. Und bei mir funktioniert es wunderbar
 
Das ist doch zum Verücktwerden 🙁.

Hast du Linux, Tomate_Salat?
Wenn nicht, könnte das jemand einmal bitte auf'nem Linuxrechner versuchen?

Kann doch nicht sein, dass diese winzige Prog nur auf meinem Rechner nicht läuft!
 
nope...nicht mehr. Aber normalerweise dürfte es nicht von der Plattform abhängen :-/ . Aber was mir gerade auffällt: Windows hat bei mir die Umgebungsvariable CLASSPATH mit folgenden Werten: [c].;C:\Programme\Java\jre6\lib\ext\QTJava.zip[/c]

wenn Michael...'s bsp nicht funktioniert, versuchs nochmal mit:
[c]javac.exe -classpath . Test.java[/c]

Edit
Code:
C:\...\Desktop\test>javac -classpath . Test.java
Funktioniert bei mir
 
Zuletzt bearbeitet von einem Moderator:
OMG, danke Tomate_Salat!!

Der Code
Code:
javac -classpath . Test.java
hat funktioniert! Keine Fehlermeldung und das Programm läuft, super! Dankeschön 😀!

Damit hat sich das Problem erledigt. Danke an alle, die mir geholfen haben!
 
Stimmt wenn sich alle java-Files in dem Verzeichnis befinden in dem man die javac ausführt, sollte die Angabe
Code:
-clathpath .
 
[...]Aber was mir gerade auffällt: Windows hat bei mir die Umgebungsvariable CLASSPATH mit folgenden Werten: [c].[/c] [...]

Versuchs mal mit dem Setzen der Umgebungsvariable Classpath
(rechtsklick auf Arbeitsplatz -> Eigenschaften -> Reiter: Erweitert -> Umgebunsvariablen -> Bei Systemvariablen: Neu ->
Name der Variablen: CLASSPATH
Wert der Variablen: .
)
 

Neue Themen


Zurück
Oben