Main startet nicht bei vorgegebenen Code

Diskutiere Main startet nicht bei vorgegebenen Code im Java Basics - Anfänger-Themen Bereich.
T

Tasmani

Hey, ich soll ein TextAdventure programmieren bei vorgegebenen Interfaces und Abstrakten Klassen. Unabhängig vom vorgegeben Code habe ich selbst schon einmal einen Ansatz selbst erstellt den ich nun an den vorgegebenen Code anpassen will.

Jetzt wollte ich zum testen halt einfach mal die Main ausführen. Das funktioniert aber leider nicht. Die Fehlermeldung liegt im Anhang:
Allgemein haben wir ein src ordner gegeben im Zusammenhang mit gradle. Um den Code auszuführen brauch ich aber doch gar kein gradle oder doch? gradle dient doch lediglich dazu, zu schauen ob der Code am Ende bestimmte Ziele erfüllt (so wie ich es verstanden habe nennt man das ,,testen"). Wo liegt denn der Fehler? Im src Ordner befindet sich ein student Ordner mit der Main wo wir unseren Code implementieren sollen und ein ias Ordner, welcher die Interfaces und abstrakten Klassen beinhaltet.

Wir dürfen den Code im ias Ordner nicht ändern, sondern sollen ihn implementieren bei unseren Code!!
 

Anhänge

J

JustNobody

Gradle dient nicht nur dem testen. Gradle ist ein Build Tool. Somit dient es auch dem bauen des Projektes. Und je nach build.gradle file kann es extrem viel machen, z.B. jar files bauen oder so.

gradlew tasks
Das gibt die die Liste der Tasks, die dein Gradle-Projekt kennt.

gradlew build
Das wäre das eigentliche Bauen des Projekts
Die classes finden sich dann in der Regel in build/classes/java/main

gradlew jar
Das sollte ein jar File zur Verfügung stellen.
Das jar findet sich dann in der Regel in build/libs/

Du kannst dann das Projekt ausführen mit:
java -cp build\classes\java\main my.package.MainClass
java -cp build\libs\my-cool-jar-file-1.0-snapshot.jar my.package.MainClass

Die Befehle sind natürlich alle im Projektverzeichnis, also da, wo auch die gradlew.bat und so liegt, auszuführen.
 
T

Tasmani

Kann man den src Ordner nicht erst einmal in eclipse ausführen?
Am Code sollte sich doch nichts ändern ..
 
T

Tasmani

Ich habe mit git clone den master Ordner heruntergeladen, welcher als gradle Build vorliegt. Wenn ich nun bei eclipse ein Projekt importieren will, wähl ich ja in diesem Fall gradle aus, aber welches Verzeichnis muss ich auswählen? Den kompletten Master Ordner, welcher alle datein enthält ?
 
T

Tasmani

So sieht es jetzt bei mir aus. Mein Ziel ist es erst einmal den Code zum laufen zu kriegen um ihn dann zu bearbeiten ....
 

Anhänge

T

Tasmani

hmm die catch Anweisung wird ja nur ausgeführt, wenn die try Anweisung ein Fehler hat. Aber wenn du sagst schau dir Zeile 18 an und da ist etwas falsch, dann müsste er doc automatisch die catch Anweisung ausführen und das Problem sollte gar nicht in Zeile 18 liegen ...^^

Um mein eigenes Adventure auszuführen, sollte es ja glaube ich einfach reichen in das Array erst einmal

Adventures.getmyGame() hinzufügen.

Wo ist denn der Fehler genau in Zeile 18 ?
 
mrBrown

mrBrown

hmm die catch Anweisung wird ja nur ausgeführt, wenn die try Anweisung ein Fehler hat. Aber wenn du sagst schau dir Zeile 18 an und da ist etwas falsch, dann müsste er doc automatisch die catch Anweisung ausführen und das Problem sollte gar nicht in Zeile 18 liegen ...^^
Häh?

Das try-catch in der main fängt nur TextAdventureException, nicht die NullPointerException.

Und auch wenn die Exception gefangen wird, ändert sich nicht der Ort des Fehlers.

Wo ist denn der Fehler genau in Zeile 18 ?
Unten steht doch was in Knallrot: in der zweiten Zeile dort ist angegeben, dass der Fehler in Adventures.java in Zeile 18 fliegt.
 
T

Tasmani

Wir dürfen aber die Adventures.java weder ändern noch irgendwohin kopieren , sondern lediglich einbinden bzw. miteinbeziehen. Die Interfaces und Klassen im ias Ordner sind vorgegeben. So habe ich das gelesen. Ich möchte den Code lediglich zum laufen kriegen ..

Lg
 

Anhänge

J

JustNobody

Ich hoffe dir ist bewusst, dass wir nur die paar Bildschirmfotos kennen .... wir kennen weder die Aufgabe noch den Code, der dir vorliegt.

NPE ist ein Zeichen dafür, dass etwas nicht initialisiert wurde. Also schau dir an, wo die NPE geschmissen wird und dann überlegt, was du ändern kannst.
 
T

Tasmani

Kurze Zusamenfassung: Wir sollen mithilfe vorgegeber Interfaces und Klassen ein Textadventure programmieren. Das Programmieren an sich mit einem vollkommen neuerzeugten Quellcode aus, da hab ich keine großen Probleme mit (so pi mal daumen ausgedrückt), aber das vorgegebene miteinzubeziehen und daraus etwas zu entwerfen, da hab ich Probleme mit, weil ich gerne es schaffen würde, dass das Programm einfach nur startet.

In der Aufgabenstellung steht:

,,
Das Interface TextAdventure bietet verschiedene Methoden, um ein neues Spiel
zu erzeugen. Uberlegen Sie sich fur jede Methode, in welchen Fällen ihre Ausführung
fehlschlagen kann.Werfen Sie in diesen Fällen eine TextAdventureException."

Kurz zu den Interfacemethoden:

Composition: Aus Zwei Items wird eins zb Wasser und Kohlensäure -> Sprudel
Decomposition: Analog wird dazu ein Item in seine zwei Bestandteile zerlegt
Transformation: z.b. habe ich einen leeren Eimer und füll ihn mit Wasser
Items: Items die ins Inventar aufgenommen werden können
SceneryType: Items die nicht ins Inventar aufgenommen werden können

Wann die Ausführung fehltschlägt sollte klar sein, z.b. wenn zwei Items nicht zu einaderpassen. Wir sollen das anschinend als Try Catch Methode realisieren. d.h. sowas in der Art wie

Try {

wenn ich Sprudel erstellen will brauche ich Wasser und Kohlensäure }

catch {

wird ausgeführt wenn mir eines der Items fehlt }

aber bevor ich das eiegntlich machen kann muss ich doch das Programm zum laufen kriegen z.b. einfach nur eine Ausgabe mit Spiel gestartet. Und da ist mein großes Problem vorhanden .. Es will irgendwie nicht starten.
 
mrBrown

mrBrown

Überleg mal, wann in Zeile 18 eine NullPointerException auftreten kann.
 
mihe7

mihe7

Und da ist mein großes Problem vorhanden .. Es will irgendwie nicht starten.
Dein großes Problem ist, dass Du anscheinend weder Java noch den Leuten hier glauben willst :) Was Du implementieren sollst etc. spielt erstmal keine Rolle.

Wenn Dein Programm startet, gibt es eine NullPointerException und Java sagt Dir sogar genau, an welcher Stelle. Also schaust Du mal nach, was an dieser Stelle steht. In Adventures.java, Zeile 18, steht etwas wie:
Java:
textAdventure.addSceneryType("...", "...");
Das einzige, was dort null sein kann, ist textAdventure. Also, schaust Du nach, wie die Variable initialisiert wird, das findest Du eine Zeile darüber:
Java:
ias.TextAdventure textAdventure = Factory.getGame("Sample1", 2, 2);
Offensichtlich liefert also Factory.getGame("Sample1", 2, 2) einfach null. Warum? Wissen wir nicht, musst Du nachschauen (Strg+Klick auf getGame dürfte Dich zur betreffenden Methode leiten, wenn nicht, muss Du Factory.java halt selbst nach der Methode durchsuchen).

Glaskugel: "Sample1" ist der Name einer Resource, die nicht vorhanden ist. Kann aber natürlich auch was anderes sein.
 
Zuletzt bearbeitet von einem Moderator:
mrBrown

mrBrown

Glaskugel: "Sample1" ist der Name einer Resource, die nicht vorhanden ist. Kann aber natürlich auch was anderes sein.
Ich würde drauf tippen, dass es von TextAdventure einfach noch keine Implementation gibt, und Factory deshalb mit Absicht null zurück gibt – liegt ja auch extra im Student-Package, wo die Dinge liegen, die angefasst werden müssen.
 
T

Tasmani

Also TextAdventure ist ja als Interface vorhanden.

public interface TextAdventure {

..

Um das zu implementieren müsste man ja die Main dann so abändern:

public class Main implements TextAdventure {

...

Allgemein werde von Interfaces keine Objekte erstellt oder? Man soll ja lediglich die Methoden ,,speziell implementieren".
Also es würde wenig Sinn ergeben

TextAdventure RPG = new TextAdventure();

zu konstuieren..
 
mrBrown

mrBrown

Um das zu implementieren müsste man ja die Main dann so abändern:

public class Main implements TextAdventure {
Nein, die Main muss man nicht verändern.

Allgemein werde von Interfaces keine Objekte erstellt oder? Man soll ja lediglich die Methoden ,,speziell implementieren".
Also es würde wenig Sinn ergeben

TextAdventure RPG = new TextAdventure();

zu konstuieren..
Ich versteh nicht wirklich was du damit sagen will – also je, von Interfaces kann man nicht direkt Objekte erstellen, aber man kann das Interface natürlich implementieren und dann von der Klasse Instanzen erstellen.

Und genau das ist deine Aufgabe: das Interface TextAdventure implementieren (und diese Implementation dann wahrscheinlich in Factory nutzen).
 
T

Tasmani

Ich habe den factory Code mal im Anhang hochgeladen. Ich würde jetzt dort das Interface TextAdventure implementieren also mithilfe implements TextAdventure. Dann würde ich die Methoden aus TextAdventure im factoryCode aufrufen und anwenden. Also sowas wie Spielfeld größe etc
Danach würde ich eine Instanz von der Klasse factory in der main erstellen, also

new RPG = new factory();

Kann man das so machen ?
 

Anhänge

Thema: 

Main startet nicht bei vorgegebenen Code

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben