Compiler-Fehler dispose();

Saschaa

Mitglied
Hallo,

ich weiß es gibt etliche Lösungen, aber ich habe bereits viele durch und kapier es nicht...
Ich möchte diesen JFrame schließen:
Java:
    public frame(String s) {
        super(s);
        JPanel p = new JPanel();
        label = new JLabel("Key Listener!");
        p.add(label);
        add(p);
        addKeyListener(this);
        setUndecorated(true);
        setVisible(true);
    }

Ich habe bereits die alle probiert:
Java:
1.Versuch new frame.dispose();
2.Versuch        frame.dispose();
3.Versuch frame ende = new frame();
3.Versuch ende.dispose();
4.Versuch        dispose ende = dispose();
4.Versuch        frame.ende();
5.Versuch        frame.this.dispose();

nicht immer dieser Fehler, aber hauptsächlich "non-static method dispose() cannot be referenced from a static context"

Woher kommt dieser Fehler und wieso funktioniert nichts davon?
 
Zuletzt bearbeitet:

Joose

Top Contributor
Das sollte dir helfen: http://stackoverflow.com/questions/1234912/how-to-programmatically-close-a-jframe

Zu deinen Versuchen: Es wäre hilfreich zu wissen wo du denn probierst diesen Code auszuführen dann kann man auch genauer sagen wie die Zeile lauten müsste. Wie wird dein JFrame Objekt erzeugt?

nicht immer dieser Fehler, aber hauptsächlich "non-static method dispose() cannot be referenced from a static context"

Woher kommt dieser Fehler und wieso funktioniert nichts davon?

1.Versuch -> irgendwas ;)
2.Versuch -> ruft die dispose() Methode von der Variable "frame" auf. Hast du so eine Variable?
3.Versuch -> Warum ein neues Objekt erstellen und gleich wieder schließen?
4.Versuch + 5.Versuch -> irgendwas ;)

Es funktionieren ein paar Varianten einfach nicht weil die Syntax nicht stimmt oder es logisch einfach nur Unsinn ist.

Edit: Klassennamen sollten in UpperCamelCase geschrieben werden.
 

Saschaa

Mitglied
Es funktionieren ein paar Varianten einfach nicht weil die Syntax nicht stimmt oder es logisch einfach nur Unsinn ist.

Deswegen frage ich nach "nicht Unsinn" bzw. richtiger Syntax :)

2.Versuch=> Immerwieder lese ich (wie auch in deinem Link) "frame.dispose();" dachte mir halt das mit frame an der Stelle dieses (public "frame"(String s){ ) gemeint ist....Dem ist aber anscheined nicht so

Wenn ich mich nicht irre dann kann ich doch:
dispose();
setVisible(true);
etc.
in meine Main Methode schreib, muss nur sagen bei welchem JFrame er das machen soll. Aber wie sage ich ihm er soll das bei dem JFrame weiter oben machen? frame.dispose(); wars ja nicht obwohl ich den Frame mit
new frame("Key Listener");
starten kann......
 
Zuletzt bearbeitet:

Joose

Top Contributor
Nein mit "frame" ist an dieser Stelle eben eine Variable mit dem Namen "frame" gemeint. Und von dieser Variable soll die Methode "dispose()" aufgerufen werden.
Dein public frame(String s) { .... ist der Konstruktor deiner Klasse und der kann nur mittels "new ....." aufgerufen werden. (Grundlagen OOP)

Wie oben schon gesagt wäre es hilfreich zu wissen wo du dein JFrame erzeugst und wo du es schließen willst.
 

Saschaa

Mitglied
Okay:
Java:
public class frame extends JFrame implements KeyListener{
    JLabel label;
    public frame(String ende) {
        super(ende);
        JPanel p = new JPanel();
        label = new JLabel("Key Listener!");
        p.add(label);
        add(p);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        addKeyListener(this);
        setUndecorated(true);
        setVisible(true);
    }
    public static void main(String[] args){
    //Code
                new frame("Key Listener");
    //Code
                setVisible(false);
    //Code
                setVisible(true);
    //Code
                dispose();
    }
}
 

Joose

Top Contributor
Wie oben schon erwähnt: Klassennamen sollten in UpperCamelCase geschrieben werden, ansonsten wäre noch folgender Link interessant java - Why shouldn't you extend JFrame and other components? - Stack Overflow

Zu deinem Problem: In der main-Methode rufst du nur den Konstruktor welcher dir das Objekt erzeugt.
Du speicherst dir das Objekt aber nicht in einer Variable ab, somit kannst du danach nicht mehr mit diesem Objekt arbeiten.
Sprich deklariere eine Variable vom Typ "frame" und weise ihr das neu erstellte Objekt zu. Danach kannst du von dieser Variable deine gewünschten Methoden aufrufen.
 

Saschaa

Mitglied
Okay, Klassennamen mach ich später richtig:

frame ab = new frame("Key Listener");
dann gibt
ab.setVisible(false);
kein problem mehr
aber um den frame jetzt zu starten, habe ich
ab();
versucht. Das geht nicht. Wie starte ich das ganze jetzt das erste mal?
 

Saschaa

Mitglied
Außerdem bringt
ab.setVisible(false);
zwar keinen fehler, funktioniert aber nicht.
Ich kapier das mit dem Objekten nicht...
ab.setVisible(false);
heißt doch soviel wie
"Den JFrame frame auf unsichtbar setzten?"
aber es passt irgendwas wieder nicht.
Arbeite übrigens nicht mit Eclipse falls das was aus macht.
 

Joose

Top Contributor
.....
aber um den frame jetzt zu starten, habe ich
ab();
versucht. Das geht nicht. Wie starte ich das ganze jetzt das erste mal?

Was meinst du mit "frame starten"? Was geht nicht? -> Geht nicht ist keine ausreichende Fehlerbeschreibung ;) Es ist immer gut zu beschreiben was gemacht werden soll und was stattdessen gemacht wird.
Willst du ihn einfach anzeigen lassen? Dann lass doch den Aufruf von setVisible(false) einfach weg.
Innerhalb des Konstruktors setzt du den Frame schon auf sichtbar.

Welchen Sinn soll ab() haben? "ab" ist der Name deiner Variable und eine Variable ist keine Methode ;)
Hier solltest du dir wirklich noch etwas Grundlagen der OOP aneignen.

Außerdem bringt
ab.setVisible(false);
zwar keinen fehler, funktioniert aber nicht.
Woran erkennst du denn das es nicht funktioniert? Bzw. was funktioniert nicht?
Ich kapier das mit dem Objekten nicht...
Was kapierst du nicht? :)
ab.setVisible(false);
heißt doch soviel wie
"Den JFrame frame auf unsichtbar setzten?"
aber es passt irgendwas wieder nicht.
Genau, das JFrame Objekt auf welches diese Variable "ab" soll unsichtbar gemacht werden. Was passt denn nicht?
Arbeite übrigens nicht mit Eclipse falls das was aus macht.
Das ist egal.
 

Saschaa

Mitglied
Naja, also
setVisible(false)
mache ich nur wenn bestimmte bedingungen erfüllt sind
Mein Programm soll so laufen
starte "frame"
wenn(x==X){
setvisible(false)
}sonst{
setvisible(true)}

Erste Frage:
frame ab = new frame("Key Listener");
hier setzte ich doch die VARIABLE ab = frame; oder?
wie rufe ich frame dann auf? mit ab(); offenbar nicht

Später soll dann ab.setvisible(false); gemacht werden. Da meckert der Compiler zwar nicht, aber er macht es auch nicht unsichtbar?
 

VfL_Freak

Top Contributor
Moin,
frame ab = new frame("Key Listener");
dann gibt
ab.setVisible(false);
kein problem mehr
aber um den frame jetzt zu starten, habe ich
ab();
versucht. Das geht nicht. Wie starte ich das ganze jetzt das erste mal?
Was meinst Du denn mit "starten" ???
Anzeigen?? Das solltest Du mit "ab.setVisible(true)" tun !!

"ab()" macht ja auch gar keinen Sinn ... was sollte denn da aufgerufen werden ??

Gruß Klaus
 

Joose

Top Contributor
Erste Frage:
frame ab = new frame("Key Listener");
hier setzte ich doch die VARIABLE ab = frame; oder?
Du deklarierst eine Variable ab vom Typ frame. Außerdem rufst du den Konstruktor deiner Klasse frame auf, das dadurch erzeugte Objekt wird der Variable zugewiesen.

wie rufe ich frame dann auf? mit ab(); offenbar nicht
Du hast deine Variable ab vom Type frame. Du kannst von dieser Variable nun alle möglichen Methoden aufrufen welche die Klasse frame (und die Superklassen) bieten.
 

Saschaa

Mitglied
Okay.....
Okay:
Java:
public class frame extends JFrame implements KeyListener{
    JLabel label;
    public frame(String ende) {
        super(ende);
        JPanel p = new JPanel();
        label = new JLabel("Key Listener!");
        p.add(label);
        add(p);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        addKeyListener(this);
        setUndecorated(true);
        setVisible(true);
    }
    public static void main(String[] args){
new frame("Key Listener");
    }
    public void keyPressed(KeyEvent e) {
        System.out.print(e.getKeyCode());
    }
}
meine main öffnet in der taskleiste ein fenster das man nicht sieht
(wenn man draufklickt passiert nichts)
DIESES Fenster guckt mit dem KeyListener welche taste ich drücke
NACH JEDEM TASTENDRUCK wird mir in der konsole der passende code angezeigt
WENN ich a drücke soll setVisible(true); auf false geändert werden.

Ich erkläre wohl zu schlecht was ich will )-:
 

Saschaa

Mitglied
Du hast deine Variable ab vom Type frame. Du kannst von dieser Variable nun alle möglichen Methoden aufrufen welche die Klasse frame (und die Superklassen) bieten.

Heißt das:
ab.frame();
^.........^....
Klasse...Methode(also das ding das den JFrame erstellt?)

Wenn ich eine methode
public static void game(){
//blabla
}
mache rufe ich diese ja in der main mit:
game();
auf.
Wie geht das bei meiner "frame" (Methode??)
 

Joose

Top Contributor
WENN ich a drücke soll setVisible(true); auf false geändert werden.

Sprich es funktioniert alles soweit, nur wird das Fenster nicht sichtbar gemacht wenn du auf a drückst?
Wo steht denn der Code, welcher überprüft ob "a" gedrückt wurde und dann eben das Fenster sichtbar macht?

Ich erkläre wohl zu schlecht was ich will )-:
Es fehlt eben leider an Grundlagen in der OOP, welche unerlässlich sind um mit UI zu arbeiten.

Heißt das:
frame.frame();
^............^....
Klasse.....Methode(also das ding das den JFrame erstellt?)
Deine Klasse heißt frame.
Der Konstruktor einer Klasse heißt genauso wie die Klasse, in diesem Fall frame.
Ein Konstruktor wird immer mit dem Schlüsselwort "new" davor aufgerufen.

Wenn ich eine methode
public static void game(){
//blabla
}
mache rufe ich diese ja in der main mit:
game();
auf.
Wie geht das bei meiner "frame" (Methode??)
Ja hierbei hast du eine statische Methode deklariert welche du aus der statischen main-Methode ohne Probleme aufrufen kannst.
Wie oben schon gesagt handelt es sich bei frame um eine Klasse! Wie du den Konstruktor der Klasse aufrufst um ein frame-Objekt zu erzeugen hast du ja oben schon in deinem Code.
 

Saschaa

Mitglied
Sprich es funktioniert alles soweit, nur wird das Fenster nicht sichtbar gemacht wenn du auf a drückst?
Wo steht denn der Code, welcher überprüft ob "a" gedrückt wurde und dann eben das Fenster sichtbar macht?
Java:
public static void main(String[] args){
new frame("Key Listener");
   }
   public void keyPressed(KeyEvent e){
String taste = e.getKeyCode();
if(taste.euqals("88");{
ab.setVisible(false);
   }
es wird einfach nicht unsichtbar....
 

Joose

Top Contributor
Ja wie weiter oben schon erwähnt: Du erzeugst in der main-Methode ein neues Objekt deiner Klasse "frame".
Da du dieses Objekt keiner Variable zuweist kannst du dann keine Methode mehr von diesem Objekt aufrufen.

Java:
public static void main(String[] args) {
    frame ab = new frame("Key Listener");
    ab.setVisible(false);
}
 

VfL_Freak

Top Contributor
Moin,
Java:
public void keyPressed(KeyEvent e)
{
   String taste = e.getKeyCode();
   if( taste.equals( "88" );
   {
       ab.setVisible(false);
   }
}
Ui, hier geht wohl so einiges durcheinander ... :(

Ein "event.getKeyCode()" liefert Dir einen int-Wert zurück, KEINEN String!
Mit diesem KeyCode kannst Du aber "getKeyText(int keyCode)", was Dir wiederum eine String liefert, der aber bspw. "A" lautet ....
Ein Blick in die API(http://docs.oracle.com/javase/8/docs/api/) hilft immer weiter ;)
Wo kommen denn Deine '88' her ??

Ich würde aber noch etwas eleganter so machen:
Java:
if( event.getKeyCode() == KeyEvent.VK_A )
{
    setVisible( false );
}

Gruß Klaus
 

Saschaa

Mitglied
Sorry scheinbar reden wir immernoch aneinander vorbei.
Mein einziges Problem ist wie ich
Java:
public class frame extends JFrame implements KeyListener{
    JLabel label;
    public frame(String ende) {
        super(ende);
        JPanel p = new JPanel();
        label = new JLabel("Key Listener!");
        p.add(label);
        add(p);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        addKeyListener(this);
        setUndecorated(true);
        setVisible(true);
    }
    public static void main(String[] args){
        new frame("Key Listener");
        setVisible(false);
        setVisible(true);
        dispose();
}

meine gui starte? Das geht, sollte ich laut Joose aber anders mache so wie ich verstanden habe => new frame("Key Listener");
meine gui unsichtbar mache? Das geht nicht... => setVisible(false);
meine gui sichtbar mache? Das geht auch nicht... => setVisible(true);
meine gui beende? Das geht auch nicht => dispose();
auch wenn ich das mache:
frame ab = new frame("Key Listener");
dann funktioniert
ab.setVisible(false);
ab.setVisible(true);
ab.dispose();
alles nicht...
Ich möchte nur wissen wie ich der gui sage das sie 1. unsichtbar wird, 2. sichtbar wird, 3. beendet wird. Aber verwende ab beziehungsweise frame falsch....
Wie kann ich das also machen?
 

Joose

Top Contributor
Sorry scheinbar reden wir immernoch aneinander vorbei.
Ich habe schon verstanden was du erreichen willst.
Ich habe auch versucht dir den richtigen Weg zu weisen, aber es fehlen teilweise einfach Grundlagen. Und dann wird hier und da schwer mit Erklärungen.

Mein einziges Problem ist wie ich

meine gui starte? Das geht, sollte ich laut Joose aber anders mache so wie ich verstanden habe => new frame("Key Listener");
Ja es reicht ein Objekt deiner Klasse "frame" zu erzeugen. Das Fenster wird laut deinem Code schon im Konstruktor sichtbar gesetzt!

meine gui unsichtbar mache? Das geht nicht... => setVisible(false);
meine gui sichtbar mache? Das geht auch nicht... => setVisible(true);
meine gui beende? Das geht auch nicht => dispose();
Das funktioniert alles, du musst diese Methoden nur vom richtigen Objekt aufrufen!

auch wenn ich das mache:
frame ab = new frame("Key Listener");
dann funktioniert
ab.setVisible(false);
ab.setVisible(true);
ab.dispose();
alles nicht...
Was heißt funktioniert nicht? Eine genauere Fehlerbeschreibung hilft hier weiter.
Wenn du diese Funktionen einfach so hintereinander stehen lässt dann kann das auch "nicht funktionieren": Du erzeugst ein neues "frame" Objekt, setzt es auf unsichtbar, dann direkt wieder auf sichtbar und danach disposed du es direkt -> Programm beendet.

Ich möchte nur wissen wie ich der gui sage das sie 1. unsichtbar wird, 2. sichtbar wird, 3. beendet wird. Aber verwende ab beziehungsweise frame falsch....
Wie kann ich das also machen?
Du verwendest schon die richtigen Befehle, aber einfach an der falschen Stelle!

Du willst das am Anfang das Fenster unsichtbar ist: Dann entferne die Zeile im Konstruktor welche das Fenster sichtbar macht.
Sobald die richtige Taste gedrückt wurde, soll das Fenster sichtbar werden? Dann musst du dort wo du den Tastendruck überprüfst (keyPresses-Methode) auch das Fenster wieder sichtbar schalten.

Wann soll das Programm beendet werden? Wenn die richtige Taste gedrückt wurde?
 

Saschaa

Mitglied
Du willst das am Anfang das Fenster unsichtbar ist: Dann entferne die Zeile im Konstruktor welche das Fenster sichtbar macht.
Sobald die richtige Taste gedrückt wurde, soll das Fenster sichtbar werden? Dann musst du dort wo du den Tastendruck überprüfst (keyPresses-Methode) auch das Fenster wieder sichtbar schalten.

Wann soll das Programm beendet werden? Wenn die richtige Taste gedrückt wurde?

Eben doch nicht genau das was ich will.
Die Sachen stehen natürlich nicht so drinnen das das Objekt erzeugt unsichtbar sichtbar und dann Geschlossen wird.
Wollte nur vermeiden den ganze Code online zu stellen
Java:
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class test extends JFrame implements KeyListener{
    static int intRichtung = 39;
    static int intRichtungBackup = intRichtung;
    JLabel label;
    public test(String ende) {
        super(ende);
        JPanel p = new JPanel();
        label = new JLabel("Key Listener!");
        p.add(label);
        add(p);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        addKeyListener(this);
        setUndecorated(true);
        setVisible(true);
    }
    public static void main(String[] args){
        //Hier mache ich etwas
        // Tasteneingabe
        test frame = new test("Key Listener");
        frame(); //Hier startet der frame NICHT
        // Hier mache ich noch ganz Viel mehr (ca. 150 Zeilen)
                 // Hier geht er in eine IF rein und soll dann den frame unsichtbar machen
                frame.setVisible(false);
                 // Noch viel viel mehr (80 Zeilen) und eine IF
                    frame.setVisible(true);
                 // else
                    frame.dispose();
                 // Noch mal mehr Zeugs
}
 

VfL_Freak

Top Contributor
Moin,
Java:
test frame = new test("Key Listener");
frame(); //Hier startet der frame NICHT
Du erzeugst doch in der ersten Zeile ein Objekt vom Typ "test" mit Namen "frame" !
Was also soll die zweite Zeile bewirken?? Vermutlich wird es doch auch wohl nirgendwo im Code eine Methode mit diesem Namen und ohne Parameter geben, oder ??

Aber wie @Joose schon schrieb
Es fehlt eben leider an Grundlagen in der OOP, welche unerlässlich sind um mit UI zu arbeiten.
Das befürchte ich auch - so wird es sehr schwer, Dir zu helfen !!

Sorry und Gruß
Klaus
 

Saschaa

Mitglied
Die Zweite zeile soll den frame starten, das das nicht funktioniert ist mir klar, das ist das Problem welches ich gerade habe.
Nur als Vergleich, ich kann den Frame starten wenn ich stattdessen das hernehme.
new test("Key Listener");
meine Frage ist also wie an dieser Stelle
Java:
    public static void main(String[] args){
        //Hier mache ich etwas
        new test("Key Listener"); // Das funktioniert! Der Frame startet
        //Wenn ich die Zeile direkt hierüber auskommentiere und nur die nächsten beiden stehen lasse startet der Frame nicht. Das hätte ich aber gerne....
        test frame = new test("Key Listener");
        frame(); //Hier startet der frame NICHT
}
 

VfL_Freak

Top Contributor
Moin,

nochmal: man startet einen Frame nicht !!
Java:
// hiermit deklarierst ein Objekt mit dem Namen 'frame' von Typ 'test' (was immer das genau ist ....)
// "gestartet" wird hier gar nix :-)
test frame = new test("Key Listener");

// Richtig, da es eine solche Methode vermutlich gar nicht gibt und 'frame' ja nur der Name/Bezeichner der Variable ist !!
//frame(); //Hier startet der frame NICHT

// dies würde das Objekt auf dem Bildschirm anzeigen (meinst Du das mit STARTEN ??)
// Natürlich immer vorausgesetzt, dass 'test' eine Art Frame-Objekt ist ....
frame.setVisible( true);

Mal ganz nebenbei ist 'frame' ggf. eine höchst unglückliche Wortwahl/Bezeichnung, da es ja auch noch die AWT-Klasse "Frame" gibt (der Vorgänger zu JFrame)!

Gruß Klaus
 

Saschaa

Mitglied
Unabhängig von ungünstigen Bennenungung oder falscher Ausdrucksweise, Danke es geht jetzt!

Java:
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class test extends JFrame implements KeyListener{
    public test(String ende) {
        super(ende);
        setSize(0, 0);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        addKeyListener(this);
        setUndecorated(true);
        setVisible(true);
    }
    public void sichtbar(){
        setVisible(true);
    }
    public void unsichtbar(){
        setVisible(false);
    }
    public static void main(String[] args){
       test frame = new test("Key Listener"); // Hier wird der frame erstellt (gestartet oder was auch immer)
       frame.unsichtbar(); //Das macht (wer hätts gedacht) den frame unsichtbar.
       frame.sichtbar(); //und das tut auch was es soll
}

EDIT:
Etwas klüger ist es wohl anstatt
frame.unsichtbar();
direkt
frame.setVisible(false);
zu schreiben und die Public void unsichtbar kann man dann entfernen
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Unabhängig von ungünstigen Bennenungung oder falscher Ausdrucksweise, Danke es geht jetzt!
Fein, fein ... allerdings irritieren mich noch einige Dinge an Deinem Code !
Java:
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class test extends JFrame implements KeyListener{
    public test(String ende) {
        super(ende);
        setSize(0, 0);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        addKeyListener(this);
        setUndecorated(true);
        setVisible(true);
    }
    public void sichtbar(){
        setVisible(true);
    }
    public void unsichtbar(){
        setVisible(false);
    }
    public static void main(String[] args){
       snake frame = new snake("Key Listener"); // Hier wird der frame erstellt (gestartet oder was auch immer)
       frame.unsichtbar(); //Das macht (wer hätts gedacht) den frame unsichtbar.
       frame.sichtbar(); //und das tut auch was es soll
}
(a) das Ganze läßt sich SO compilieren ??
(b) wo kommt denn die Klasse "snake" her??
(c) die Klasse 'test' wird gar nicht benutzt !?!?!
(d) die Methoden 'sichtbar' und 'unsichtbar' kannst Du dir auch sparen. Warum nicht direkt
Java:
frame.setVisible(false); //Das macht (wer hätts gedacht) den frame unsichtbar.
frame.setVisible(true); //und das tut auch was es soll

(e) ist Dein Frame denn VOR dem "frame.unsichtbar();" schon sichtbar ???

gruß Klaus
 

Saschaa

Mitglied
a: Nein natürlich nicht, er geht mir nur darum wie ich z.b. frame.unsichtbar(); mache, zwischen diesen 3 aufrufen passieren noch etliche andere Dinge die einfach jetzt nicht mit drinnen stehen
b: abtippfehler, sollte "test" heißen
c: siehe b
d: ich hatte ja keinen plan wie ich es überhaupt hinbekomme, jetzt ist mir das auch klar. das war es was ich seit dem erstellen des threads Wissen wollte :rolleyes:
e: jap denn:
Java:
    public test(String ende) {
        super(ende);
        setSize(0, 0);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        addKeyListener(this);
        setUndecorated(true);
        setVisible(true);
    }
 
Zuletzt bearbeitet von einem Moderator:

VfL_Freak

Top Contributor
Moin,
abtippfehler, sollte "test" heißen
na, tolle Wurst ... :eek: :(
Wie soll man Dir vernünftig helfen, wenn Du so konfusen Code postest ?? .... :confused:
Wenn man weiß, dass Du die Klasse "test" ansprichst, ist es ja logisch, dass Du den Frame siehst .....

Na gut, Hauptsache ist ja, dass Du es nun verstanden hast :cool:
BTW: Formatierungen wie fett, kursiv, unterstrichen können innerhalb von Code-Tags natürlich NICHT vorgenommen werden, da ja eben diese Tags für Formatierung sorgen !!

Gruß Klaus
 

Saschaa

Mitglied
Habe noch eine (ganz) andere Frage:
Diesmal erstmal ein Code den man so Kompilieren kann und voll funktioniert (auch getestet):
Java:
class Test{
    public static void main(String[] args){
        for(int i = 0; i < 10; i++){
            System.out.println("Zeile " + i);
        }
    }
}
Was passiert ist klar.
Wie kann ich nun alles was in der Konsole steht löschen? (Soll einach alles weg und halt ganz oben in der ersten Zeile wieder stehen:
C:\Ordner>
Wie kann ich das realisieren?
 

Saschaa

Mitglied
Das hier:
"Die" Konsole in Java ist ein PrintStream und somit gibt es keine Möglichkeit Zeichen, die bereits ausgegeben wurden, wieder zu löschen, also quasi ein ClearScreen zu machen.

Du kannst Leerzeilen zwar ausgeben, dies ist aber sehr von der Umgebung abhängig.

Unter Windows beispielsweise kannst du die Puffergrösse für cmd.exe festlegen und daher weisst du nicht genau, wieviele Leerzeilen du ausgeben musst.

Gewisse ANSI-Steuercodes könnten helfen, verlangen aber einen entsprechenden installierten Treiber.

Unter Unix ist die Kommando-Shell sehr häufig in der Lage, VT100 kompatible Steuercommands zu verstehen. Hier sollte die Ausgabe Esc[2J das Terminal Fenster löschen. Aber wie gesagt, auch hier sehr von der Umgebung abhängig.
habe ich auch schon gelesen, aber in der Konsole direkt kann ich ja "cls" eingeben was genau das bewirkt was ich möchte. Also stimmt das Zitat ja nicht komplett...
 

Joose

Top Contributor
Willst du aus Java heraus die Konsole wieder löschen? Oder geht es nur generell darum die Konsole zu leeren?
Unter Windows geht das mit dem Befehl "cls"
 

Saschaa

Mitglied
Aus Java raus die Konsole leeren
Was ich bis jetzt hatte hat noch nicht funktioniert:
try{
Runtime.getRuntime().exec("cls");
}catch(Exception e){}
 

Saschaa

Mitglied
Danke für den Link, das geht!
Java:
import java.io.IOException;
class Test{
    public static void main(String[] args)throws IOException, InterruptedException {
        for(int i = 0; i < 10; i++){
            System.out.println("Zeile " + i);
        }
        new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
    }
}
 

Ähnliche Java Themen

Neue Themen


Oben