Java Hyperlink erstellen

Freshy

Mitglied
Hi,

und zwar möchte ich für meinen Discord Server Hyperlinks erstellen. Dafür habe ich auch schon einen Bot, der auch funktioniert. Nun möchte ich aber die Klasse Hyperlink hinzufügen und halt auch einrichten. Ich richte mich nach folgender Anleitung:
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Hyperlink.html

Mein Quelltext sieht so aus:

Java:
package de.coaster.Hyperlink;

import net.dv8tion.jda.api.entities.ChannelType;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;

public class hyperlink {
    
    @Override
    public void onMessageReceived(MessageReceivedEvent event) {
        
        String message = event.getMessage().getContentDisplay();
    
    if (event.isFromType(ChannelType.TEXT)) {
        TextChannel channel = event.getTextChannel();
        
        if (message.startsWith("HL ")) {
            String[] args = message.substring(3).split(" ");
    
    hyperlink link = new hyperlink("Test"); {
    
    URL = www.google.de; }
    
    }
        
    }
    
}

}

Dabei kommen auf Folgenden Zeilen die folgenden Fehlermeldungen:

  • 10: The method onMessageReceived(MessageReceivedEvent) of type hyperlink must override or implement a supertype method
  • 20: The method onMessageReceived(MessageReceivedEvent) of type hyperlink must override or implement a supertype method
  • 22: Multiple markers at this line
    - URL cannot be resolved to a
    variable
    - www cannot be resolved to a
    variable
Ich hoffe, ihr könnt mir helfen.

PS.: Ich bin noch recht neu hier um Forum und habe auch noch nicht so viel Erfahrung mit Java.
 
Nicht viel Erfahrung mit Java und dann ein Beispiel mit JavaFX ...?! Zumindest die Fehlermeldung könnte man versuchen zu beheben: https://javarevisited.blogspot.com/2013/02/must-override-superclass-method-java-eclipse.html (obwohl eine JRE < 7 wohl kaum genutzt werden dürfte). Weiterhin sind Angaben zur verwendeten IDE (Netbeans, Eclipse, IntelliJ, BlueJ,...), den verwendeten Plugins (JavaFX,...) und der JRE / dem JDK ( Kommandozeile - "java -version") evtl. auch hilfreich.
 
Die ersten zwei Fehlermeldungen sagen dir, dass noch Methoden von der Oberklasse/Elternklasse Fehlen und diese Überschrieben oder Implementiert werden müssen.

Jenachdem welche IDE du hast kannste das auch von der IDE erstellen lassen.

Edit:
Nicht viel Erfahrung mit Java und dann ein Beispiel mit JavaFX ...?! Zumindest die Fehlermeldung könnte man versuchen zu beheben: https://javarevisited.blogspot.com/2013/02/must-override-superclass-method-java-eclipse.html (obwohl eine JRE < 7 wohl kaum genutzt werden dürfte). Weiterhin sind Angaben zur verwendeten IDE (Netbeans, Eclipse, IntelliJ, BlueJ,...), den verwendeten Plugins (JavaFX,...) und der JRE / dem JDK ( Kommandozeile - "java -version") evtl. auch hilfreich.

Da warst du schneller mit Antworten, nicht gesehen.
 
Wenn du die Annotation @Overrides verwendest, dann muss die Methode eine Methode der Superklasse überschreiben.

Deine Klasse hyperlink erbt von Object und Deine @Override Methoden gibt es in Object nicht. Daher diese Fehler.
 
Die ersten zwei Fehlermeldungen sagen dir, dass noch Methoden von der Oberklasse/Elternklasse Fehlen und diese Überschrieben oder Implementiert werden müssen.

Jenachdem welche IDE du hast kannste das auch von der IDE erstellen lassen.
Nein, umgekehrt. Er hat zwei Methoden mit @Overrides aber seine Klasse erbt von Object und die Methoden gibt es in Object nicht.

Aber ich Frage mich, was er genau machen will, denn er hat ja eine Klasse hyperlink erstellt und nicht die javafx Hyperlink Klasse verwendet ....
 
Ach ja, der letzte Fehler: Die Klasse hyperlink scheint keine Instanzvariable URL zu haben, daher kann er die natürlich auch nicht setzen.
 
@M.L. Ich nutze Eclipse. Plugins habe ich keine installiert. Meine Java Version ist"1.8.0_211"
@Lyreex und @kneitzel Ich habe jetzt dieses @Override einfach mal entfernt und meinen Quelltest angepasst:

Java:
package de.coaster.Hyperlink;

import net.dv8tion.jda.api.entities.ChannelType;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;

public class hyperlink {
   
    public void onMessageReceived(MessageReceivedEvent event) {
       
        hyperlink link = new hyperlink("Test");
        URL = www.google.de {
       
        String message = event.getMessage().getContentDisplay();
   
    if (event.isFromType(ChannelType.TEXT)) {
        TextChannel channel = event.getTextChannel();
       
        if (message.startsWith("HL ")) {
            String[] args = message.substring(3).split(" ");
           
            channel.sendMessage("Hyperlink:" + link ).queue(); }
   
    }
       
    }
   
}

}

Die Fehler sind jetzt folgende: Zeile 11: The constructor hyperlink(String) is undefined und Zeile 12
Multiple markers at this line
- Syntax error, insert ";" to complete Statement
- Syntax error, insert ":: IdentifierOrNew" to complete
ReferenceExpression
- URL cannot be resolved to a variable
- www cannot be resolved to a variable

Ach ja, der letzte Fehler: Die Klasse hyperlink scheint keine Instanzvariable URL zu haben, daher kann er die natürlich auch nicht setzen.

Und wie kann ich die Instanzvariable URL erstellen?
 
Ich würde Dir raten, dich erst einmal von Grund auf mit Java zu beschäftigen. Dann verstehst du die Konzepte bezüglich Instanzvariablen, Konstruktoren und all sowas ... Auch die Java Syntax solltest du lernen ... Die Zeile mit URL = ... scheint so erst einmal keinen Sinn zu machen .... www.google.de mag evtl. ein String sein, dann müsste es in ". Aber dann müsste da auch ein ; um die Zuweisung abzuschließen. Wozu öffnest du denn da dann noch einen Block?

Desweiteren ist mir unklar, was du genau machen willst. Ich vermute, dass Du da gerade etwas machst, das Du so gar nicht willst.

Du hast z.B. die Klasse Hyperlink erwähnt: willst du die nutzen oder was hast du vor? Und schreibst du überhaupt eine javafx Applikation?

Und was soll Deine Klasse hyperlink überhaupt machen? Wer ruft die Methoden wo auf und was soll da genau passieren? Du hast ja eine Instanz, in der onMessageReceived aufgerufen wird und da wird dann eine weitere Instanz deiner Klasse hyperlink erzeugt? Fragen über Fragen aber wie gesagt: ich sehe da gerade nicht, wo das hinführen soll und was der Code bezwecken soll ....
 
Muss man das? Ich richte mich hauptsächlich nach Anleitungen, die es im Internet gibt, wie von mir direkt von Java.
Dieses hier: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Hyperlink.html hat nichts mit einer Anleitung zu tun.
Das ist die Dokumentation für eine JavaFX-Klasse, die einen Hyperlink innerhalb einer grafischen Oberfläche darstellt.

Du willst weder JavaFX nutzen, noch überhaupt eine grafische Oberfläche programmieren.


Ganz ehrlich: du solltest dich noch mal ausführlich mit den Grundlagen beschäftigen. Dein Code ist so voller Fehler, dass da ein absolutes Grundlagentutorial hilfreicher als dieses Forum wäre.
 
Wie in dem anderen Thread bereits erwähnt bin ich stark dafür, dass du dir erstmal ein paar Java-Grundlagen anschaust, bevor du mit Discord-Bots o.ä. weiter machst. Aber zurück zum Thema:
Du versuchst gerade - wieso auch immer du auf so eine abstruse Idee kommst - eine JavaFX Komponente in Discord zu benutzen .. das geht natürlich nicht. Nur weil die Klasse Hyperlink heißt, heißt es nicht, dass diese automatisch immer (sinnvoll) genutzt werden kann.

Hyperlinks in Discord zu versenden ist nur über kleine Tricks möglich. So kannst du zB eine MessageEmbed Nachricht versenden. Dort kannst du im Titel einen Link mitgeben. Beispiel:
Java:
MessageEmbed message = new EmbedBuilder().setTitle("Klick mich", "http://www.google.de").build();
event.getChannel().sendMessage(message).queue();
Alternative wäre sich ein Webhook für deinen Bot zu erstellen .. die Nachricht die dann dort versendet werden würde, würde aber auch dem Stil einer MessageEmbed folgen - von daher mEn nicht wirklich lohnenswert.
 

Zurück
Oben