Java – die neusten Beiträge

Discord-Bot (Java, JDA) Befehl wird nicht ausgeführt?

Ich programmiere einen Discord-Bot mit Java. Um Befehle zu lesen, benutze ich einen Listener (der dem Builder hinzugefügt wurde) und ein Command-Manager-System.

Dies ist der Listener:

public class Listener extends ListenerAdapter {

[...]

@Override
public void onMessageReceived(MessageReceivedEvent event) {
String message = event.getMessage().getContentDisplay();
if (event.isFromType(ChannelType.TEXT)) {
TextChannel channel = event.getTextChannel();
if (message.startsWith(Bot.INSTANCE.prefix)) {
String[] args = message.substring(Bot.INSTANCE.prefix.length()).split(" ");
if (args.length > 0) {
if(!Bot.INSTANCE.getCmdMan().perform(args[0], event.getMember(), channel, event.getMessage())) {
// Kein Befehl entdeckt
}
}
}
}
}
}

Die getCmdMan()-Methode liefert den Command-Manager, der hier steht:

public class CommandManager {

public ConcurrentHashMap<String, ServerCommand> commands;

public CommandManager() {

this.commands = new ConcurrentHashMap<>();

[...]

this.commands.put("startGW", new StartGiveawayCommand());

[...]

}

public boolean perform(String command, Member m, TextChannel channel, Message message) {

ServerCommand cmd;

if ((cmd = this.commands.get(command.toLowerCase())) != null) {

cmd.performCommand(m, channel, message);

}

return false;

}

}

Alle Befehlsklassen erben (implements Klasse()) aus der Command-Klasse. Ich denke aber nicht, dass ich diese hier aufführen muss, da sie nur die Funktion, die in den Befehls-Klassen überschrieben wird, enthält. Die Befehls-Klassen sehen folgendermaßen aus: (ich nehme als Beispiel die StartGiveawayCommand-Klasse)

public class StartGiveawayCommand implements ServerCommand {

@Override

public void performCommand(Member m, TextChannel c, Message message) {

int index = 0;

System.out.println(index);

index++;

if(!m.hasPermission(Permission.ADMINISTRATOR)) {

message.delete().queue();

c.sendMessage(":x: Du hast nicht die Berechtigung, HanLink-Bot zu verwenden!").queue();

return;

}

[...]

}

}

Die System.out.println("");-Funktionen habe ich hinzugefügt nachdem der Befehl nicht ausgeführt wurde. In die Konsole kam auch kein Output.

Die anderen Befehle werden aber ausgeführt (z.B. !purge)

Was habe ich falsch gemacht? bzw. Was muss ich ändern?

programmieren, Java, Bot, jda, Discord, Discord Bot

Wie fixe ich diesen Error?

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
        at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:330)
        at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:263)
        at java.util.jar.JarVerifier.processEntry(JarVerifier.java:318)
        at java.util.jar.JarVerifier.update(JarVerifier.java:230)
        at java.util.jar.JarFile.initializeVerifier(JarFile.java:383)
        at java.util.jar.JarFile.ensureInitialization(JarFile.java:612)
        at java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(JavaUtilJarAccessImpl.java:69)
        at sun.misc.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:991)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:451)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)

Ich habe einen DiscordBot in der JDA programmiert (maven) aber ich kann die
jar datei nicht ausführen weiß jemand wieso?

programmieren, Java, Code, Error, maven

Wie kann ich dieses Zustandsdiagramm am besten Umsetzen? (Java)?

Hey ich muss folgendes Zustandsdiagramm umsetzen:

Folgenden Code habe ich bereits für die Wahl des Getränks geschrieben:

import java.util.Scanner;
public class Getraenkeautomat
{
public static void main(String[] args)
{
boolean automatBereit = true;
int Apfelschorle = 01;
int Cola = 11;
int Spezi = 21;
int Wasser = 31;
int gewaehltesGetraenk;
String Getraenk;

Scanner s = new Scanner(System.in);
System.out.println("BESCHREIBUNG:");
System.out.println("Zuerst Getraenkwaehlen:");
System.out.println("Apfelschorle = 01; Cola = 11; Spezi = 21; Wasser = 31");
System.out.println("Dann entsprechenden Betrag mit folgenden Muenzen bezahlen:");
System.out.println("1 = 1€; 0.5 = 50ct; 0.2 = 20ct");
Getraenk = s.next();
gewaehltesGetraenk = Integer.parseInt(Getraenk);
if (gewaehltesGetraenk == Apfelschorle){
System.out.println("gewaehltes Getraenk: Apfelschorle");
System.out.println("Bitte zahlen sie 1.50€");
}
else{
if(gewaehltesGetraenk == Cola){
System.out.println("gewaehltes Getraenk: Cola");
System.out.println("Bitte zahlen sie 2.00€");
}
else{
if(gewaehltesGetraenk == Spezi){
System.out.println("gewaehltes Getraenk: Spezi");
System.out.println("Bitte zahlen sie 1.70€");
}
else{
if(gewaehltesGetraenk == Wasser){
System.out.println("gewaehltes Getraenk: Wasser");
System.out.println("Bitte zahlen sie 1.00€");
}
}
}
}
}
}

Nur habe ich das Problem, dass ich keine Ahnung habe wie ich am besten die Münzeingabe umsetzen soll. Wie ihr evtl schon dem Code entnehmen konntet kann der Anwendern 1Euro, 50ct und 20 ct Münzen einwerfen. Wenn zuviel eingeworfen wird soll entsprechend das Getränk mit Rückgeld ausgegeben werden, wenn zu wenig eingeworfen wird soll der noch zu bezahlende betrag ausgegeben werden. Ich habe es mit einer Do while schleife probiert bin jedoch auf kein schlüssiges ergebnis gekommen weshalb ich euch diese erspare. Könntet ihr mir dazu einen Ansatz bzw Lösungsvorschlag sagen wie ich den Münzeinwurf umsetzen soll?

Bild zum Beitrag
Computer, programmieren, Java, Informatik

Minecraft Server lässt sich nicht starten?

Hallo erstmal,

ab und zu setze ich für paar Kollegen und mich einen Minecraft Server auf. Eigentlich keine große Sache, da ich das schon oft gemacht habe. Seit dem letzten mal startet er aber nicht und gibt folgende Fehlermeldung aus:

[0.055s][warning][os,thread] Failed to start thread - pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, guardsize: 0k, detached.
Error occurred during initialization of VM
java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
        at java.lang.Thread.start0(java.base/Native Method)
        at java.lang.Thread.start(java.base/Thread.java:803)
        at java.lang.ref.Reference.<clinit>(java.base/Reference.java:303)

Oft macht das den ganzen Server kaput, wonach ich ihn neu aufsetzen muss. Zumindest kann ich das Problem nicht anders lösen.

Ich habe das Problem auf meinem alten V-Server schon gehabt und bei meinem neuen ist es nicht anders, selbst mit einem frischen System.

Die Installation läuft wie folgt:

apt install openjdk-11-jre-headless -y

adduser --disabled-login minecraft

su minecraft

cd

wget https://cdn.getbukkit.org/spigot/spigot-1.16.5.jar

java -Xms4096M -Xmx4096M -jar /home/minecraft/spigot-1.16.5.jar

Auf dem Server läuft Ubuntu 18.04.

Nebenbei läuft nur ein Teamspeak. Ein CSGO Server ist installiert läuft aber nicht.

Komisch finde ich das ich das Problem auf unterschiedlichen Servern bekomme, im Internet dazu aber nicht wirklich etwas finden kann. Was mach ich also falsch?

Danke schonmal für eure Hilfe!

Server, Computer, Linux, Java, Ubuntu, Minecraft

Java, textdokument in zweidimensionalen Array speichern und ausgeben?

Hey, bei meiner dieswöchigen Informatik Übung müssen wir ein Spielfeld aus einem Textdokument in ein Zweidimensionales Array einlesen und ausgeben.

Ein Textdokument sieht zB so aus:

https://pastebin.com/5CViAyG5

Ich hätte die Aufgabe mit folgendem Code gelöst:

[CODE]

class Input {

public static void main(String[] args) {

Input x = new Input();

x.openup("MazeWithExit_windows.txt");

}

void openup(String fileName) {

In.open(fileName);

int height = In.readInt();

int length = In.readInt();

Out.println("Height: " + height);

Out.println("Length: " + length);

char [][] a = new char[length][height];

for(int i=0;i<a.length;i++) {

for(int j =0;j<a[i].length;j++) {

a[i][j] = In.read();

Out.print(a[i][j]);

}

}

In.close();

}

}

[/CODE]

Die In und Out Klassen müssen wir verwenden.. Out.print statt System.Out.print

Und In hilft beim einlesen.

So, jetzt zum eigentlichen Problem..

Ansich funktioniert der Code, jedoch liest er auch newlines ein, weshalb das Array vorzeitig voll ist und nicht das ganze Spielfeld einliest.

Ausgabe: https://pastebin.com/czTDF2MA

Uns wurde gesagt, man soll einfach ein dummy-read reinmachen, was die newlines einliest und diese somit nicht zum Array hinzugefügt werden. Jemand hat auch gemeint, dass nach der inneren Schleife ein In.readLine(); das Problem löst.

Doch nichts hat mit geholfen.

Wie löse ich das Problem? :o

Computer, Studium, programmieren, Java, Eclipse, Informatik, Programmiersprache

Minecraft Server geht nicht?

Hallo.

Ich habe gestern auf meinem V Server Multicraft installiert, und jetzt wollte ich einen Server installieren. Es kam dann aber nur diese Fehlermeldung:

03.01 10:52:26[Multicraft] Received start command
03.01 10:52:26[Multicraft] Loading server properties
03.01 10:52:26[Multicraft] Starting server!
03.01 10:52:26[Multicraft] Loaded config for "Default Minecraft Server"
03.01 10:52:26[Server]INFO Exception in thread "main" java.lang.UnsupportedClassVersionError: net/minecraftforge/fml/relauncher/ServerLaunchWrapper : Unsupported major.minor version 52.0
03.01 10:52:26[Server]INFO at java.lang.ClassLoader.defineClass1(Native Method)
03.01 10:52:26[Server]INFO at java.lang.ClassLoader.defineClass(ClassLoader.java:808)
03.01 10:52:26[Server]INFO at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
03.01 10:52:26[Server]INFO at java.net.URLClassLoader.defineClass(URLClassLoader.java:443)
03.01 10:52:26[Server]INFO at java.net.URLClassLoader.access$100(URLClassLoader.java:65)
03.01 10:52:26[Server]INFO at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
03.01 10:52:26[Server]INFO at java.net.URLClassLoader$1.run(URLClassLoader.java:349)
03.01 10:52:26[Server]INFO at java.security.AccessController.doPrivileged(Native Method)
03.01 10:52:26[Server]INFO at java.net.URLClassLoader.findClass(URLClassLoader.java:348)
03.01 10:52:26[Server]INFO at java.lang.ClassLoader.loadClass(ClassLoader.java:430)
03.01 10:52:26[Server]INFO at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:326)
03.01 10:52:26[Server]INFO at java.lang.ClassLoader.loadClass(ClassLoader.java:363)
03.01 10:52:26[Server]INFO at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
03.01 10:52:26[Multicraft] Server shut down (starting)
03.01 10:52:26[Multicraft] Restarting crashed server in 5 seconds
03.01 10:52:26[Multicraft] Stopping server!
03.01 10:52:28[Multicraft] Looks like a crash, check the server console. Return value: 1
03.01 10:52:28[Multicraft] Server stopped

Was muss ich machen dass ich den Server starten kann? Ich möchte Forge 1.12.2 drauf installieren.

PC, Server, Computer, Internet, Software, Fehler, Linux, Programm, IT, Java, Minecraft, EDV, Minecraft Server, Fehlermeldung, Debian, Multicraft

Meistgelesene Beiträge zum Thema Java