You are not logged in.

  • Login
Bitte besucht unser neues Forum unter https://forum.nitrado.net | Please visit our new Forum at https://forum.nitrado.net

Dear visitor, welcome to Nitrado.net Prepaid Gameserver Community-Support - Archiv. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

BtoBastian

Moderator

  • "BtoBastian" is male
  • "BtoBastian" started this thread

Posts: 3,612

Occupation: Softwareentwickler

  • Send private message

1

Sunday, July 14th 2013, 7:34am

Leitfaden: Wie wird mir am schnellsten geholfen?

Allgemeine Dinge, die bei (fast) jeder Sprache beachtet werden müssen
  • Du hast noch garnichts programmiert, sondern willst nur wissen wie etwas geht? Dann drück dich verständlich aus, dann hast du die Lösung schon fast.
  • Sollte es einen Fehler irgend einer Art geben, dann poste ihn auch vollständig und sage nicht nur, dass es einen Fehler gab.
  • Egal wie geheim dein Projekt sein mag, ohne Code kann dir nicht geholfen werden. Also poste wenigsten den relevanten Codeteil!
  • Code immer zwischen [php][/php] (bei Java [java][/java]) schreiben!
    Bitte beachte hierbei, dass du den Reiter 'Quellcode' ausgewählt hast. (siehe Bild im Anhang: Quelltext.jpg)
  • In den meisten Fehlermeldungen steht auch eine Zeilenangabe (dazu später mehr). Daher solltest du, wenn du nur einen Codeabschnitt postest unbedingt auch bei der ersten Zeile hinzuschreiben, welche Zeile es im vollständigen Code ist.
  • Beschreibe dein Problem gut! Wenn du einfach nur sagst "Bitte helft mir, wo ist der Fehler" und das oben genannte hinzupackst, dann will dir niemand wirklich gerne helfen.
  • WICHTIG: Immer nett bleiben!


Auch ist es sehr ratsam bevor du nach Hilfe ersuchst, die SuFu (Such-Funktion) zu nutzen um zu sehen, ob die Frage schon einmal gestellt wurde.

Java: Bukkit-Plugins

Das wichtigste was man bei Bukkit-Plugins beachten sollte ist aufjedenfall, die server.log zu posten, sofern ein Fehler auftritt. Eventuell auch nur die Fehlermeldung.

Wie "liest" man die Fehlermeldung
Die meisten Problem kann man selbständig lösen, wenn man nur weiß, wie man die Fehlermeldung "entziffert". Daher werde ich das versuchen an einem kleinem Beispiel zu erklären:

Fehlermeldung


Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2013-06-24 16:58:30 [SEVERE] Could not pass event PlayerInteractEvent to Spleef v1.0
org.bukkit.event.EventException
	at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
	at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
	at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
	at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
	at org.bukkit.craftbukkit.v1_5_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:186)
	at net.minecraft.server.v1_5_R3.PlayerInteractManager.interact(PlayerInteractManager.java:370)
	at net.minecraft.server.v1_5_R3.PlayerConnection.a(PlayerConnection.java:631)
	at net.minecraft.server.v1_5_R3.Packet15Place.handle(SourceFile:58)
	at net.minecraft.server.v1_5_R3.NetworkManager.b(NetworkManager.java:292)
	at net.minecraft.server.v1_5_R3.PlayerConnection.d(PlayerConnection.java:109)
	at net.minecraft.server.v1_5_R3.ServerConnection.b(SourceFile:35)
	at net.minecraft.server.v1_5_R3.DedicatedServerConnection.b(SourceFile:30)
	at net.minecraft.server.v1_5_R3.MinecraftServer.r(MinecraftServer.java:581)
	at net.minecraft.server.v1_5_R3.DedicatedServer.r(DedicatedServer.java:226)
	at net.minecraft.server.v1_5_R3.MinecraftServer.q(MinecraftServer.java:477)
	at net.minecraft.server.v1_5_R3.MinecraftServer.run(MinecraftServer.java:410)
	at net.minecraft.server.v1_5_R3.ThreadServerApplication.run(SourceFile:573)
Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
	at java.util.ArrayList.rangeCheck(Unknown Source)
	at java.util.ArrayList.get(Unknown Source)
	at de.oppermann.bastian.spleef.SpleefArena.startNewGame(SpleefArena.java:57)
	at de.oppermann.bastian.spleef.SpleefArena.putPlayerInQueue(SpleefArena.java:106)
	at de.oppermann.bastian.spleef.SpleefArena.onPlayerIntercat(SpleefArena.java:137)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
	... 16 more



Hier sind 3 wichtige Stellen um den Fehler zu lösen:

Zeile 1: [SEVERE] Could not pass event PlayerInteractEvent to Spleef v1.0
Mit ein paar Englischkenntnissen, die wohl jeder haben sollte, kann man daraus erkennen, dass das PlayerInteractEvent des Plugins Spleef nicht richtig vollendet werden konnte

Zeile 20: Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
Hier kann man manchmal mit ein bisschen Englisch schnell auf die Lösung kommen, manchmal wird man aber auch nicht wirklich schlau draus. Dann kann eine Google-Suche helfen.

Zeile 23: at de.oppermann.bastian.SpleefArena.startNewGame(SpleefArena.java:57)
Dies ist wohl mit Abstand die wichtigste Zeile. Diese findet man, wenn man von unten an die Fehlermeldung Zeile für Zeile durchgeht bis man zum ersten Bereich kommt, der von seinem eigenem Plugin ist. Dies wäre in diesem Beispiel Zeile 25. Dort kann man dann die Reihenfolge erkennen, in der die Methoden aufgerufen wurden. In dem Beispiel in der onPlayerIntercat-Methode wurde die Methode putPlayerInQueue aufgerufen und in dieser dann startNewGame. In Klammern dahinter steht das meist wichtigste, die Zeilenangabe, des Fehlers: (SpleefArena.java:57) bedeutet, der Fehler ist in der Klasse SpleefArena in Zeile 57 aufgetreten.

Wenn man das alles kombiniert findet man den Fehler meisten sehr schnell:
Das PlayerInteractEvent wurde gefeuert, dort wurde dann die Methode putPlayerInQueue() aufgerufen, in der dann die Methode startNewGame() aufgerufen wurde. Dort wurde in Zeile 57 auf einen Index in einer ArrayList zugegriffen, der zu hoch war. (z.B. ArrayList mit 2 Inhalten mit index 0 & 1 und dann wurde ArrayList.get(2) benutzt.)

Fehler mit YAML (z.B. die config.yml)
Viele Fehler, vorallem bei Neueinsteigern, liegen in Fehlerhafter Formatierung von Datein, die die Auszeichnungssprache YAML nutzen. Meistens passieren die Fehler bei der plugin.yml und der config.yml.
Dies sieht dann meistens so aus:

Fehlermeldung

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2013-07-14 10:41:05 [SEVERE] Could not load 'plugins\Spleef.jar' in folder 'plugins'
org.bukkit.plugin.InvalidDescriptionException: Invalid plugin.yml
	at org.bukkit.plugin.java.JavaPluginLoader.getPluginDescription(JavaPluginLoader.java:257)
	at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:132)
	at org.bukkit.craftbukkit.v1_6_R2.CraftServer.loadPlugins(CraftServer.java:239)
	at org.bukkit.craftbukkit.v1_6_R2.CraftServer.<init>(CraftServer.java:217)
	at net.minecraft.server.v1_6_R2.PlayerList.<init>(PlayerList.java:56)
	at net.minecraft.server.v1_6_R2.DedicatedPlayerList.<init>(SourceFile:11)
	at net.minecraft.server.v1_6_R2.DedicatedServer.init(DedicatedServer.java:106)
	at net.minecraft.server.v1_6_R2.MinecraftServer.run(MinecraftServer.java:391)
	at net.minecraft.server.v1_6_R2.ThreadServerApplication.run(SourceFile:582)
Caused by: unacceptable character '?' (0xFFFD) special characters are not allowed
in "<reader>", position 203
	at org.yaml.snakeyaml.reader.StreamReader.checkPrintable(StreamReader.java:98)
	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:191)
	at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:63)
	at org.yaml.snakeyaml.Yaml.load(Yaml.java:411)
	at org.bukkit.plugin.PluginDescriptionFile.<init>(PluginDescriptionFile.java:188)
	at org.bukkit.plugin.java.JavaPluginLoader.getPluginDescription(JavaPluginLoader.java:252)
	... 8 more


Hier fallen einem natürlich gleich 3 Meldungen ins Auge:
Zeile 1: [SEVERE] Could not load 'plugins\Spleef.jar' in folder 'plugins'
Zeile 2: org.bukkit.plugin.InvalidDescriptionException: Invalid plugin.yml
Zeile 12: Caused by: unacceptable character '?' (0xFFFD) special characters are not allowed

Dieser Fehler tritt auf, wenn man Sonderzeichen in einer YAML-Datei benutzt. Hierbei sind ä,ö,ü und ß die 4 häufigsten Fehlerquellen. Aber natürlich sind auch viele andere Sonderzeichen nicht erlaubt.

Zeile 13: in "<reader>", position 203
Dies zeigt leider nicht die Zeile an, sondern der wie vielte Buchstabe es ist. Da die meisten Programme aber nur die Zeile anzeigen und nicht der wie vielte Buchstabe im Text es ist kann man damit meist wenig anfangen. Wenn man aber ein Programm dafür kennt ist es natürlich ratsam dieses zu nutzen, da man dann die genaue Stelle des Fehlers kennt.

Auf diese Dinge sollte man bei YAML-Datein immer achten:
  • Keine Sonderzeichen
  • Keine Tabs
  • Formatierung einhalten (siehe Wikipedia)


Wenn ihr dennoch eine Fehlermeldung bekommt, obwohl ihr alles eingehalten habt, dann die YAML-Datei immer als Anhang dem Beitrag hinzufügen, da sonst die Formatierung 'kaputt' gehen kann.
Standard Standart eines Flamingos ist einbeinig.

This post has been edited 15 times, last edit by "BtoBastian" (Dec 26th 2014, 9:52pm)


Bitte besucht unser neues Forum unter https://forum.nitrado.net| Please visit our new Forum at https://forum.nitrado.net