Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich hab folgendes Problem. Wenn ich zB den KeyListener Interface implementieren will findet er diese nicht.
Habe festgestellt, dass meine Eclipse IDE (v. 2021-09 (4.21.0)) zwar die Bibliothek awt kennt aber dieser leer ist.
Also den package awt kann ich importieren, aber wenn ich eine Klasse innerhalb von awt importieren will ist dieser
wie gesagt leer.
Um KeyListener zu verwenden muss folgendes Statement verwendet werden: import java.awt.event.KeyListener;
Das Package heißt nicht einfach awt sondern java.awt.event.
Welche Java Version nutzt du? Hast du eine module-info.java?
Hintergrund:
Ab Java 9 gibt es ein Modul System. Wenn man etwas aus einem Modul nutzen will, dann muss man das angeben.
Ohne modul-info.java ar einen man in einem anonymen Modul und das nutzt automatisch alle Module, welche im Classpath sind.
Daher wären mögliche Lösungen:
A) Die module-info.java einfach komplett löschen. Das kann gerade am Anfang sinnvoll sein.
B) in der module-info.java angeben, dass man das Modul für Desktop Anwe dungen (awt, swing) nutzen will. Dies ginge über ein
requires java.desktop;
In der Modulbeschreibung.
Danke kneitzel,
das könnte es sein. Hab auf Java 16 gestellt. Leider kann ich selbst mit dieser Information kaum was anfangen.
Hab lange nicht mehr programmiert. Wenn ich ein neues Projekt starte, und es auf Java 1.8 stelle geht es trotzdem nicht. Bei Java 16 hab ich versucht die modul-info zu löschen, ging auch nicht.
Hab auch in meinen Workspace nachgeschaut und dort keine weiteren modul-info klassen gefunden. Was könnte ich noch tun?
Die Einstellungen deiner IDE sind eine Sache. Die Umstellung auf Java 16 kann ich aber nicht nachvollziehen. Immerhin ist Java 17 als LTS-Version bereits erschienen.
Unter Linux ist es üblich ein Problem über Befehle auf der Kommandozeile aufzuzeigen und die Fehlermeldungen mitzuteilen. So etwas vermisse ich hier im Forum. Das würde vieles einfacher machen.
Für Support der IDE gibt es spezielle Foren der Hersteller aber meine Vermutung ist, dass die Einstellungen für das verwendete Java/JDK falsch sind, wenn keine module-info.java existiert.
Achtung: Viel geschrieben - Den ersten Block mit Java 17 kannst Du machen... Das mit dem Projekt dürfte nicht notwendig sein. Vermutlich findet sich die Lösung weiter unter (Ist mir erst eingefallen, als das alles fast fertig geschrieben hatte)!
Ok, wenn, dann wäre die Datei module-info.java direkt im src Ordner des Projektes.
Java 16 ist prinzipiell in Ordnung - das dürfte das JDK sein, dass auch eclipse beim Installieren mit installiert so der Installer kein JDK vorfindet (So wie ich das verstanden habe - aber Eclipse ist nicht meine bevorzugte IDE).
Ich sehe jetzt gerade kein wirkliches Problem. Aber ich beschreibe jetzt ein Vorgehen, das Du einmal nachvollziehen kannst. Evtl. behebt es das Problem. Aber unabhängig davon hebst Du deine installierte Java Version auf eine Version, die "supported" ist.
a) Java 17 herunter laden und installieren. (z.B. von https://adoptium.net/) Das volle JDK herunter laden und nicht nur das JRE! (Ist Standard und kannst Du nur falsch machen, wenn Du alle Versionen anzeigen lässt)
b) In Eclipse Windows -> Preferences
Java / Installed JRE -> Add.. und dann das unter a) installierte JDK hinzu fügen (Add -> Standard VM -> Directory... und das Verzeichnis auswählen, wo du das Java 17 hin installiert hast.
c) In dem Fenster (Java / Installed JRE) das alte JDK auswählen und entfernen.
d) Optional: Dann nach Java / Installed JRE / Execution Environment schauen. Aber da sollte dann unter den JavaSE-xx Einträgen immer das JRE 17 gelistet sein und sonst nichts. (JavaSE-8, JavaSE-11 und JavaSE-16 sind derzeit wichtig)
Das wären die Einstellungen der IDE.
Nun noch im Projekt einfach mal das JRE neu einbinden:
a) Properties vom Projekt öffnen (Rechtsclick auf Projekt und dann Properties auswählen)
b) Links "Java Build Path" auswählen, Reiter Libraries
c) Dort die JRE System Library löschen (Auswählen + Remove)
d) Add Library... Button -> JRE System Library auswählen und next drücken. Dann Execution Environment JavaSE-16 auswählen. (Alternativ kannst Du natürlich auch unter Alternate-JRE dein Java 17 auswählen.)
3) finish und fertig
Clean ausführen:
Menü Project -> Clean... ausführen, ggf. Projekte wählen, die gesäubert werden sollen.
Ausprobieren, ob Du das Projekt bauen und ausführen kannst. Falls Du noch keine Main Methode / Klasse hast, dann füg erst einmal in einer beliebigen Klasse ein:
Java:
public static void main(String[] args) {
System.out.println("Hello World!");
}
Dann Rechtsclick in den Editor der Klasse: Run As -> Java Application
==> In einem Console Unterfenster solle Hello World! ausgegeben werden und fertig.
Wenn das klappt, dann füge oben (ggf. unter der package Zeile) hinzu: import javax.swing.JFrame;
Und die main verändert sich zu:
Java:
public static void main(String[] args) {
JFrame frame = new JFrame("Test");
frame.setSize(200, 100);
frame.show();
}
Erneut Rechtsclick und Run As -> Java Applikation
Startet das mit einem Fenster? Oder gibt es Fehlermeldungen?
Meckert der Editor?
Und wo ich das alles geschrieben habe: Den Fall hatte ich erst neulich hier im Forum. Jetzt wo ich es durchspiele fällt es mir ein: java.awt ist in der Autovervollständigung per default deaktiviert!
Menü: Windows Preferences
Java -> Appearance -> Type Filters
Dort den Haken bei java.awt.* wegnehmen
"Apply and Close" Button und der Editor zeigt dir alles in java.awt an
Also um es noch einmal klar zu sagen: Vermutlich wird in java.awt nichts von der Unterstützung im Editor angezeigt, weil diese Unterstützung ausgefiltert war. Das ist nur ein Assistent beim Eingeben von Code. Du kannst den Code immer noch schreiben. Der Editor sollte diesen als richtigen Code erkennen und es sollte auch funktionieren (ohne die beschriebene Änderung der Type Filter).
Nur eben der Assistent macht Sinn, wenn man mit Swing arbeitet. Ansonsten sind auch alle awt Methoden in Swing Klassen nicht verfügbar. (JFrame hat ein setSize(...) das aber von einer awt Klasse geerbt wird. Also wird beim Tippen bei einer JFrame Variable kein setSize zu sehen sein - ebenso wie keine Methode eben aus einer AWT Super-Klasse.)
Hab vielen dank, war wirklich das was du unten beschrieben hast. Jetzt erkennt er die Klassen. Verstehe aber trotzdem nicht warum es ausgefiltert wird. Naja, schönes Wochenende