Freigeisterhaus Foren-Übersicht
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   NutzungsbedingungenNutzungsbedingungen   BenutzergruppenBenutzergruppen   LinksLinks   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Java kompilieren

 
Neues Thema eröffnen   Neue Antwort erstellen   Drucker freundliche Ansicht    Freigeisterhaus Foren-Übersicht -> DAU's Paradise
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Wolf
registrierter User



Anmeldungsdatum: 23.08.2004
Beiträge: 16610
Wohnort: Zuhause

Beitrag(#1356607) Verfasst am: 07.09.2009, 21:31    Titel: Java kompilieren Antworten mit Zitat

Ich versuch gerade mal wieder mit Java zu arbeiten. Wie üblich scheiterts am Kompilieren.
Installiert habe ich JDK Update 16.
Bei den Umgebungsvariablen habe ich zu den Pfaden den Pfad zu javac hinzugefügt und die Konsole findet bei javac -version immerhin etwas.
Ich erinnere mich einmal einen sehr Javatextprogram gehabt zu haben mit den ich einfach komplimieren konnte, mittlerweile habe ich Notepad++, eclipse und Textpad 5 wo ich nicht mehr einfach komplimieren klicken konnte, sondern wenn überhaupt nur irgendwelche Befehle eingeben konnte von denen ich noch nicht den richtigen gefunden hab.
Über Konsole javac Dateiname.java bekomme ich eine Fehlermeldung(Datei nicht gefunden).
Ich hab den Pfad wo mein Testprogramm ist in Umgebungsvariablen Classnpath hinzugefügt.
Bringt auch nichts.
_________________
Trish:(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Spartacus Leto
Ist hier raus!



Anmeldungsdatum: 27.08.2005
Beiträge: 5659

Beitrag(#1356612) Verfasst am: 07.09.2009, 21:50    Titel: Re: Java kompilieren Antworten mit Zitat

Wolf hat folgendes geschrieben:
Ich versuch gerade mal wieder mit Java zu arbeiten. Wie üblich scheiterts am Kompilieren.
Installiert habe ich JDK Update 16.
Bei den Umgebungsvariablen habe ich zu den Pfaden den Pfad zu javac hinzugefügt und die Konsole findet bei javac -version immerhin etwas.
Ich erinnere mich einmal einen sehr Javatextprogram gehabt zu haben mit den ich einfach komplimieren konnte, mittlerweile habe ich Notepad++, eclipse und Textpad 5 wo ich nicht mehr einfach komplimieren klicken konnte, sondern wenn überhaupt nur irgendwelche Befehle eingeben konnte von denen ich noch nicht den richtigen gefunden hab.
Über Konsole javac Dateiname.java bekomme ich eine Fehlermeldung(Datei nicht gefunden).
Ich hab den Pfad wo mein Testprogramm ist in Umgebungsvariablen Classnpath hinzugefügt.
Bringt auch nichts.


Meinst du vielleicht das Programm?? Ist zwar primär für Schüler gedacht, aber durchaus brauchbar.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolf
registrierter User



Anmeldungsdatum: 23.08.2004
Beiträge: 16610
Wohnort: Zuhause

Beitrag(#1356619) Verfasst am: 07.09.2009, 22:03    Titel: Antworten mit Zitat

Danke. Das kannte ich gar nicht.
Funktioniert ohne das ich irgendwas basteln musste. Super!
_________________
Trish:(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
boomklever
Impfgegnergegner



Anmeldungsdatum: 25.07.2006
Beiträge: 11112
Wohnort: Stuttgart

Beitrag(#1356620) Verfasst am: 07.09.2009, 22:03    Titel: Antworten mit Zitat

Seit dem JDK 1.2 muss der CLASSPATH ueberhaupt nicht mehr fuer die Standardklassen gesetzt werden, sondern nur noch fuer 3rd party classes. Wenn du also keine benutzerspezifischen Klassen einbinden musst, sollte alles out-of-the-box funktionieren. Wenn du weitere Klassen einbinden musst, legst du diese entweder in einer konsistenten Ordnerstruktur (z.B. unter /opt/java/classes) ab oder, wenn du sie später nicht wiederverwenden willst im CWD. Deinen $CLASSPATH setzt du dann auf das systemweite Klassenverzeichnis und auf das CWD:
Code:

$ export CLASSPATH=$CLASSPATH:/opt/java/classes:.

bzw. fuegst denselben Eintrag deiner .bashrc (oder dem Äquivalent der von dir benutzten Shell) hinzu.

BTW: Welche Fehlermeldung gibt dir der Compiler denn genau zurueck? Du kompilierst dein Programm mit dem folgenden Befehl?
Code:

$ javac foo.java


Und startest das Programm folgendermassen?
Code:

$ java foo

(ohne die extension)
_________________

Don't gift pearls before casting an octopus in a movie.
-- Cherry (ACNH)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gollrich
superheftig general



Anmeldungsdatum: 06.12.2007
Beiträge: 1098
Wohnort: Mannheim

Beitrag(#1356843) Verfasst am: 08.09.2009, 15:34    Titel: Antworten mit Zitat

Gibts einen vernünfitigen Grund warum du nicht mit Eclipse NetBeans IDEA arbeitest ? ... reine Selbstgeißelung ? ...

Auch wenn es gerne immer wieder von alten Dozenten gepredigt wird, mit java und javac am anfang zu arbeiten... der Lerneffekt ist null und die Frustation einfach nur hoch....

Java entwickeln hat nix mit Syntax, Linking oder Compilieren zu tun... da für hat man ne IDE ,... der Rest ist immer noch genug Hirnschmalz....
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Shadaik
evolviert



Anmeldungsdatum: 17.07.2003
Beiträge: 26377
Wohnort: MG

Beitrag(#1357338) Verfasst am: 09.09.2009, 16:25    Titel: Antworten mit Zitat

gollrich hat folgendes geschrieben:
Gibts einen vernünfitigen Grund warum du nicht mit Eclipse NetBeans IDEA arbeitest ? ... reine Selbstgeißelung ? ...

Auch wenn es gerne immer wieder von alten Dozenten gepredigt wird, mit java und javac am anfang zu arbeiten... der Lerneffekt ist null und die Frustation einfach nur hoch....

Java entwickeln hat nix mit Syntax, Linking oder Compilieren zu tun... da für hat man ne IDE ,... der Rest ist immer noch genug Hirnschmalz....
Zum Beispiel, wiel er nunmal für eine Plattform (beispielsweise diverse Mobiltelefone) entwickelt, auf der Java üblich ist?
_________________
Fische schwimmen nur in zwei Situationen mit dem Strom: Auf der Flucht und im Tode
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
gollrich
superheftig general



Anmeldungsdatum: 06.12.2007
Beiträge: 1098
Wohnort: Mannheim

Beitrag(#1357489) Verfasst am: 09.09.2009, 20:36    Titel: Antworten mit Zitat

Shadaik hat folgendes geschrieben:
gollrich hat folgendes geschrieben:
Gibts einen vernünfitigen Grund warum du nicht mit Eclipse NetBeans IDEA arbeitest ? ... reine Selbstgeißelung ? ...

Auch wenn es gerne immer wieder von alten Dozenten gepredigt wird, mit java und javac am anfang zu arbeiten... der Lerneffekt ist null und die Frustation einfach nur hoch....

Java entwickeln hat nix mit Syntax, Linking oder Compilieren zu tun... da für hat man ne IDE ,... der Rest ist immer noch genug Hirnschmalz....
Zum Beispiel, wiel er nunmal für eine Plattform (beispielsweise diverse Mobiltelefone) entwickelt, auf der Java üblich ist?


Das geht mehr als nur ausgezeichnet mit Eclipse und der jeweiligen SDK des Mobiltelefonherstellers, bzw. J2MEPolish und Ant .... zwinkern ...

java javac hab ich dabei noch nie benutzt zwinkern....

grüße gollrich
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolf
registrierter User



Anmeldungsdatum: 23.08.2004
Beiträge: 16610
Wohnort: Zuhause

Beitrag(#1372791) Verfasst am: 05.10.2009, 21:40    Titel: Antworten mit Zitat

Wie funktioniert das actionperformed in java?
Ein Button soll nach anklicken einen Wert auf falsch setzen.
Ich bekomme folgende Fehlermeldung:
Zitat:
local variable b is accessed from within inner class; needs to be declared final

Wenns final ist kann ich den Wert erst recht nicht ändern.
_________________
Trish:(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Lukianos
Oberzyniker



Anmeldungsdatum: 28.12.2008
Beiträge: 63
Wohnort: Dresden

Beitrag(#1372826) Verfasst am: 05.10.2009, 23:04    Titel: Antworten mit Zitat

Ohne ein wenig Code ist es schwer.
Ich versuchs mal:
Code:
AeussereKlasse.this.b = true;
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolf
registrierter User



Anmeldungsdatum: 23.08.2004
Beiträge: 16610
Wohnort: Zuhause

Beitrag(#1372964) Verfasst am: 06.10.2009, 08:31    Titel: Antworten mit Zitat

Code:
public class Klasse extends JPanel
[...]diverse Methoden[...]
public void run(boolean bo){
while(bo){
[..]}
}

public static void main(string[] args){
Klasse meineKlasse= new Klasse();
boolean b=true;
meineKlasse.run(b);
final JButton stopper = new JButton("Stop");
stopper.addActionListener(new ActionListener(){
public void actionPerformed(actionevent e){
 this.b=false;});




So findet er b nicht und selbst wenn habe ich meine Zweifel das es so funktioniert.
Meiner Empfindung nach gehört das ganze sowieso nicht in den static Teil doch, im anderen Teil bekommen ich Probleme überhaupt den ActionListener zu erzeugen.

Letzlich will ich die aufgerufene run-Methode manuell beenden.
_________________
Trish:(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ragmaanir
Fieser Necessitator



Anmeldungsdatum: 12.06.2005
Beiträge: 833
Wohnort: Hamburg

Beitrag(#1373207) Verfasst am: 06.10.2009, 17:05    Titel: Antworten mit Zitat

Wolf hat folgendes geschrieben:
Code:
public class Klasse extends JPanel
[...]diverse Methoden[...]
public void run(boolean bo){
while(bo){
[..]}
}

public static void main(string[] args){
Klasse meineKlasse= new Klasse();
boolean b=true;
meineKlasse.run(b);
final JButton stopper = new JButton("Stop");
stopper.addActionListener(new ActionListener(){
public void actionPerformed(actionevent e){
 this.b=false;});




So findet er b nicht und selbst wenn habe ich meine Zweifel das es so funktioniert.
Meiner Empfindung nach gehört das ganze sowieso nicht in den static Teil doch, im anderen Teil bekommen ich Probleme überhaupt den ActionListener zu erzeugen.

Letzlich will ich die aufgerufene run-Methode manuell beenden.


Code:

public class Klasse extends JPanel
{
  private JButton stopper = new JButton("Stop");
  private boolean running = false;

  [...]diverse Methoden[...]

  public Klasse(){
    stopper.addActionListener(new ActionListener()
    {
      public void actionPerformed(actionevent e){
        stop();
      }
    });
  }

  public void stop(){
    running = false;
  }

  public void run(){
    running = true;
    while(running){
      [..]
    }
  }

  public static void main(string[] args)
  {
    Klasse meineKlasse = new Klasse();

    meineKlasse.run();
  }
}


Du musst die while-Schleife aber eventuell in einem eigenen Thread ausführen damit die GUi nicht eingefroren wird. Was willst du in der while Schleife überhaupt machen? Ich nehme mal an dass es eine Berechnung ist oder so die man per Stop Button beenden können soll. Es fehlt glaube ich auch noch n JFrame in dem das Panel angezeigt werden soll.
_________________
Dieser Post enthält die unumstößliche, objektive Wahrheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Wolf
registrierter User



Anmeldungsdatum: 23.08.2004
Beiträge: 16610
Wohnort: Zuhause

Beitrag(#1373255) Verfasst am: 06.10.2009, 18:34    Titel: Antworten mit Zitat

Danke. Jetzt wo's im Konstrukter steht funktionierts.
Wenn ich dannach erneut run aufrufe stürzt das Progrämmchen ab Traurig
_________________
Trish:(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ragmaanir
Fieser Necessitator



Anmeldungsdatum: 12.06.2005
Beiträge: 833
Wohnort: Hamburg

Beitrag(#1373264) Verfasst am: 06.10.2009, 18:54    Titel: Antworten mit Zitat

Wolf hat folgendes geschrieben:
Danke. Jetzt wo's im Konstrukter steht funktionierts.
Wenn ich dannach erneut run aufrufe stürzt das Progrämmchen ab Traurig


Exception (welche?) oder bleibt es hängen (eingefrorenes GUI)? Und was meinst du mit "funktionierts"? Heißt das, dass die while-Schleife einmal korrekt ausgeführt wird?
_________________
Dieser Post enthält die unumstößliche, objektive Wahrheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Wolf
registrierter User



Anmeldungsdatum: 23.08.2004
Beiträge: 16610
Wohnort: Zuhause

Beitrag(#1373265) Verfasst am: 06.10.2009, 18:59    Titel: Antworten mit Zitat

Ragmaanir hat folgendes geschrieben:
Wolf hat folgendes geschrieben:
Danke. Jetzt wo's im Konstrukter steht funktionierts.
Wenn ich dannach erneut run aufrufe stürzt das Progrämmchen ab Traurig


Exception (welche?) oder bleibt es hängen (eingefrorenes GUI)?
Es friert ein.

Und was meinst du mit "funktionierts"? Heißt das, dass die while-Schleife einmal korrekt ausgeführt wird? [/quote]Die while Schleife wird solange ausgeführt bis ich auf den Stop-Button klicke.

Desweiteren kann ich paint nicht in action performed aufrufen(Ganz bewusst nicht repaint.) Liegt evtl daran das ich nicht genau weiß was ich in die Klammern der Paintmethode schreiben soll.
Bekomme folgende Fehlermeldung vom compiler:
Code:

 invalid method declaration; return type required
         actionPerformed(action e){



Danke für die Hilfe.
_________________
Trish:(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ragmaanir
Fieser Necessitator



Anmeldungsdatum: 12.06.2005
Beiträge: 833
Wohnort: Hamburg

Beitrag(#1373268) Verfasst am: 06.10.2009, 19:10    Titel: Antworten mit Zitat

Wolf hat folgendes geschrieben:
Ragmaanir hat folgendes geschrieben:
Wolf hat folgendes geschrieben:
Danke. Jetzt wo's im Konstrukter steht funktionierts.
Wenn ich dannach erneut run aufrufe stürzt das Progrämmchen ab Traurig


Exception (welche?) oder bleibt es hängen (eingefrorenes GUI)?
Es friert ein.

D.h.: Wenn du das erste mal die run methode startest (zB per button), dann läuft sie bis du auf stop klickst. Wenn du dann nochmal die run methode startest, dann friert es ein. Hab ich das richtig verstanden? Zeig da am besten mal den Code (Konstruktoren der Klassen + code der bei button klicks ausgeführt wird).

Zitat:

Desweiteren kann ich paint nicht in action performed aufrufen(Ganz bewusst nicht repaint.) Liegt evtl daran das ich nicht genau weiß was ich in die Klammern der Paintmethode schreiben soll.
Bekomme folgende Fehlermeldung vom compiler:
Code:

 invalid method declaration; return type required
         actionPerformed(action e){


Hm, das sieht eher so aus als hättest du bei actionPerformed den Rückgabetyp nicht angegeben:
Code:
public void actionPerformed(action e){

Ansonsten zeig mal mehr code, ist sonst schwer einzuschätzen wo die Fehler liegen.

Zitat:
Danke für die Hilfe.

Kein Problem Sehr glücklich
_________________
Dieser Post enthält die unumstößliche, objektive Wahrheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Wolf
registrierter User



Anmeldungsdatum: 23.08.2004
Beiträge: 16610
Wohnort: Zuhause

Beitrag(#1373272) Verfasst am: 06.10.2009, 19:17    Titel: Antworten mit Zitat

Ragmaanir hat folgendes geschrieben:
D.h.: Wenn du das erste mal die run methode startest (zB per button), dann läuft sie bis du auf stop klickst. Wenn du dann nochmal die run methode startest, dann friert es ein. Hab ich das richtig verstanden? Zeig da am besten mal den Code (Konstruktoren der Klassen + code der bei button klicks ausgeführt wird).
Die run-Methode wird automatisch gestartet.
static main[...]
Klasse meineKlasse = new Klasse();
meineKlasse.run();

Im Button stand eigentlich nur: running = true, run(); return;
Der Button war im Konstruktur der Klasse eingebaut.

Zitat:

Desweiteren kann ich paint nicht in action performed aufrufen(Ganz bewusst nicht repaint.) Liegt evtl daran das ich nicht genau weiß was ich in die Klammern der Paintmethode schreiben soll.
Bekomme folgende Fehlermeldung vom compiler:
Code:

 invalid method declaration; return type required
         actionPerformed(action e){


Hm, das sieht eher so aus als hättest du bei actionPerformed den Rückgabetyp nicht angegeben:
[/quote]Wie mache ich das?
Ich will das neu gezeichnet wird, aber nicht mit repaint, sondern mit paint, da ein paar alte Dinge gelöscht werden sollten.
_________________
Trish:(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ragmaanir
Fieser Necessitator



Anmeldungsdatum: 12.06.2005
Beiträge: 833
Wohnort: Hamburg

Beitrag(#1373291) Verfasst am: 06.10.2009, 19:49    Titel: Antworten mit Zitat

Wolf hat folgendes geschrieben:

Zitat:

Zitat:

Desweiteren kann ich paint nicht in action performed aufrufen(Ganz bewusst nicht repaint.) Liegt evtl daran das ich nicht genau weiß was ich in die Klammern der Paintmethode schreiben soll.
Bekomme folgende Fehlermeldung vom compiler:
Code:

 invalid method declaration; return type required
         actionPerformed(action e){


Hm, das sieht eher so aus als hättest du bei actionPerformed den Rückgabetyp nicht angegeben:
Wie mache ich das?
Ich will das neu gezeichnet wird, aber nicht mit repaint, sondern mit paint, da ein paar alte Dinge gelöscht werden sollten.

Poste mal den Code (+5 Zeilen außenrum) wo der Compiler meckert.
_________________
Dieser Post enthält die unumstößliche, objektive Wahrheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Wolf
registrierter User



Anmeldungsdatum: 23.08.2004
Beiträge: 16610
Wohnort: Zuhause

Beitrag(#1373354) Verfasst am: 06.10.2009, 21:18    Titel: Antworten mit Zitat

Code:
ActionListener al2=new ActionListener(){
         actionPerformed(action e){
           paint();
         }
       };

_________________
Trish:(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
gollrich
superheftig general



Anmeldungsdatum: 06.12.2007
Beiträge: 1098
Wohnort: Mannheim

Beitrag(#1373360) Verfasst am: 06.10.2009, 21:23    Titel: Antworten mit Zitat

... vlt hilft es ja ...


grüße gollrich



Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Logger;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Klasse extends JPanel {
   private static final long serialVersionUID = 1L;
   private static final Logger LOGGER = Logger.getLogger("Klassen Logger");
   
   private final static String STOP_LABEL = "Stop";
   
   private JButton stopper = new JButton(STOP_LABEL);
   private boolean running = false;

   public Klasse() {
      this.add(stopper);
      MyButtonListener buttonListener = new MyButtonListener();
      stopper.addActionListener(buttonListener);
   }

   public void stop() {
      if(running){
      LOGGER.info("stop");
      running = false;
      }
   }

   public void run() {
      LOGGER.info("run");
      running = true;
      
      while (running) {
         // Do something...
         LOGGER.info("blub");
         
      }
   }

   public static void main(String[] args) {
      Klasse meineKlasse = new Klasse();
      
      JFrame jframe = new JFrame();
      
      jframe.add(meineKlasse);
      
      jframe.setTitle("Title");
      jframe.setSize(200, 150);
      jframe.setVisible(true);
      
      
      meineKlasse.run();
      System.exit(0);
   }

   class MyButtonListener implements ActionListener {
      MyButtonListener() {
      }

      public void actionPerformed(ActionEvent e) {
         if (e.getActionCommand().equals(STOP_LABEL)) {
            LOGGER.info("actionPerformed");
            stop();
         }
      }
   }
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ragmaanir
Fieser Necessitator



Anmeldungsdatum: 12.06.2005
Beiträge: 833
Wohnort: Hamburg

Beitrag(#1373368) Verfasst am: 06.10.2009, 21:30    Titel: Antworten mit Zitat

Wolf hat folgendes geschrieben:
Code:
ActionListener al2=new ActionListener(){
         actionPerformed(action e){
           paint();
         }
       };


Vor actionPerformed fehlt: "public void"

Also:
Code:
ActionListener al2=new ActionListener(){
         public void actionPerformed(action e){
           paint();
         }
       };

_________________
Dieser Post enthält die unumstößliche, objektive Wahrheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Wolf
registrierter User



Anmeldungsdatum: 23.08.2004
Beiträge: 16610
Wohnort: Zuhause

Beitrag(#1373382) Verfasst am: 06.10.2009, 21:40    Titel: Antworten mit Zitat

Danke.
Bei paint fehlt noch der richtige Parameter.
In der ursprünglichen Methode steht paint(Graphics g). Diese Methode wird auf mir mysteriöse Weise automatisch aufgerufen. (Vlt von JFrame?).
Ich habe aber keine Ahnung was ich jetzt reinschreiben muss, nichts scheint zu funktionieren.
_________________
Trish:(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ragmaanir
Fieser Necessitator



Anmeldungsdatum: 12.06.2005
Beiträge: 833
Wohnort: Hamburg

Beitrag(#1373387) Verfasst am: 06.10.2009, 21:44    Titel: Antworten mit Zitat

Wolf hat folgendes geschrieben:
Danke.
Bei paint fehlt noch der richtige Parameter.
In der ursprünglichen Methode steht paint(Graphics g). Diese Methode wird auf mir mysteriöse Weise automatisch aufgerufen. (Vlt von JFrame?).
Ich habe aber keine Ahnung was ich jetzt reinschreiben muss, nichts scheint zu funktionieren.

Ja, ich meine paint wird intern aufgerufen. Paint kann man auch überschreiben. Versuch es eventuell mal mit invalidate(). Wenn ich mich recht erinnere sagt das der GUI quasi: Bitte neuzeichnen. Dann wird paint getriggert. Java und Java GUIs sind bei mir aber schon etwas her so dass ich die API nicht mehr ganz im Kopf habe.
_________________
Dieser Post enthält die unumstößliche, objektive Wahrheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Wolf
registrierter User



Anmeldungsdatum: 23.08.2004
Beiträge: 16610
Wohnort: Zuhause

Beitrag(#1373412) Verfasst am: 06.10.2009, 22:08    Titel: Antworten mit Zitat

Ragmaanir hat folgendes geschrieben:
Versuch es eventuell mal mit invalidate().
Hat leider keinen Effekt. Ändere ich manuell die Größe des Fensters, wird meines Wissens ja erneut auf Paint zugegriffen, dann habe ich jedenfalls den gewünschten Effekt.
_________________
Trish:(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolf
registrierter User



Anmeldungsdatum: 23.08.2004
Beiträge: 16610
Wohnort: Zuhause

Beitrag(#1373426) Verfasst am: 06.10.2009, 22:25    Titel: Antworten mit Zitat

Wolf hat folgendes geschrieben:
Ragmaanir hat folgendes geschrieben:
Versuch es eventuell mal mit invalidate().
Hat leider keinen Effekt. Ändere ich manuell die Größe des Fensters, wird meines Wissens ja erneut auf Paint zugegriffen, dann habe ich jedenfalls den gewünschten Effekt.

Ich hab jetzt eine Möglichkeit gefunden auf paint zuzugreifen. Allerdings hat es quasi den selben Effekt wie repaint, vergangenes wird nicht gelöscht. Ich würde gerne das alles löschen und neu zeichnen.
_________________
Trish:(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ragmaanir
Fieser Necessitator



Anmeldungsdatum: 12.06.2005
Beiträge: 833
Wohnort: Hamburg

Beitrag(#1373464) Verfasst am: 07.10.2009, 00:35    Titel: Antworten mit Zitat

Wolf hat folgendes geschrieben:
Wolf hat folgendes geschrieben:
Ragmaanir hat folgendes geschrieben:
Versuch es eventuell mal mit invalidate().
Hat leider keinen Effekt. Ändere ich manuell die Größe des Fensters, wird meines Wissens ja erneut auf Paint zugegriffen, dann habe ich jedenfalls den gewünschten Effekt.

Ich hab jetzt eine Möglichkeit gefunden auf paint zuzugreifen. Allerdings hat es quasi den selben Effekt wie repaint, vergangenes wird nicht gelöscht. Ich würde gerne das alles löschen und neu zeichnen.

Hm, was genau zeichnest du da eigentlich? Zeichnest du "per Hand"? Also hast du die paint methode überschrieben oder so? Ich weiß leider nicht wie man das neuzeichnen triggert Traurig. Wenn du per Hand zeichnest könntest du auf dem Graphics Object fillRect bzw clearRect aufrufen um den gesamten Zeichenbereich des Panels mit der Hintergrundfarbe zu füllen.
_________________
Dieser Post enthält die unumstößliche, objektive Wahrheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Wolf
registrierter User



Anmeldungsdatum: 23.08.2004
Beiträge: 16610
Wohnort: Zuhause

Beitrag(#1373618) Verfasst am: 07.10.2009, 13:25    Titel: Antworten mit Zitat

Ragmaanir hat folgendes geschrieben:
Hm, was genau zeichnest du da eigentlich? Zeichnest du "per Hand"?
Wenn ich dich richtig verstehe. Nein. Es wird nach gewissen Regeln und etwas Zufall gezeichnet.
Zitat:

Also hast du die paint methode überschrieben oder so? Ich weiß leider nicht wie man das neuzeichnen triggert Traurig. Wenn du per Hand zeichnest könntest du auf dem Graphics Object fillRect bzw clearRect aufrufen um den gesamten Zeichenbereich des Panels mit der Hintergrundfarbe zu füllen.

Ich könnte mit ner Schleife sicher den ganzen Bereich so löschen. Ist aber vermutlich sehr ineffizent.
Oder ich mache ein Riesen- Rechteck. Mal testen.

Hmm. Das funktioniert fast. Wenn run() nicht läuft(ruft ständig repaint auf) funktionierts nicht.
Desweiteren stürzt bei jedem Versuch run() über einen Button aufzurufen ab. run() greift auf ein paar Methoden zu. Sollten die in den Konstruktor?

Edit: Das Bildschirm löschen, habe ich jetzt in paint drinnen und funktioniert gut. Nur erzeugt clearRect() einen weißen Hintergrund und nicht den standart-Hintergrund(so blaugrau).
Das run() nicht über einen Button aufgerufen werden kann nervt echt.
_________________
Trish:(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ragmaanir
Fieser Necessitator



Anmeldungsdatum: 12.06.2005
Beiträge: 833
Wohnort: Hamburg

Beitrag(#1373653) Verfasst am: 07.10.2009, 14:32    Titel: Antworten mit Zitat

Wolf hat folgendes geschrieben:
Ragmaanir hat folgendes geschrieben:
Hm, was genau zeichnest du da eigentlich? Zeichnest du "per Hand"?
Wenn ich dich richtig verstehe. Nein. Es wird nach gewissen Regeln und etwas Zufall gezeichnet.
Zitat:

Also hast du die paint methode überschrieben oder so? Ich weiß leider nicht wie man das neuzeichnen triggert Traurig. Wenn du per Hand zeichnest könntest du auf dem Graphics Object fillRect bzw clearRect aufrufen um den gesamten Zeichenbereich des Panels mit der Hintergrundfarbe zu füllen.

Ich könnte mit ner Schleife sicher den ganzen Bereich so löschen. Ist aber vermutlich sehr ineffizent.
Oder ich mache ein Riesen- Rechteck. Mal testen.


Nimm clearRect und übergib den gesamten Panel-Bereich, dann sollte das gesamte Panel mit der Hintergrundfarbe überschrieben werden.

Zitat:

Hmm. Das funktioniert fast. Wenn run() nicht läuft(ruft ständig repaint auf) funktionierts nicht.
Desweiteren stürzt bei jedem Versuch run() über einen Button aufzurufen ab. run() greift auf ein paar Methoden zu. Sollten die in den Konstruktor?


Post mal code (besser zu viel als zu wenig: run, constructor, actionlistener, ...). Wahrscheinlich ist irgendwo eine endlosrekursion versteckt.

Edit: Benutzt du Graphics oder Graphics2D zum Zeichnen? Bei Graphics2D kannst du mit setBackground die Hintegrundfarbe setzen.
_________________
Dieser Post enthält die unumstößliche, objektive Wahrheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Wolf
registrierter User



Anmeldungsdatum: 23.08.2004
Beiträge: 16610
Wohnort: Zuhause

Beitrag(#1373668) Verfasst am: 07.10.2009, 14:41    Titel: Antworten mit Zitat

Ragmaanir hat folgendes geschrieben:
Wolf hat folgendes geschrieben:
Ragmaanir hat folgendes geschrieben:
Hm, was genau zeichnest du da eigentlich? Zeichnest du "per Hand"?
Wenn ich dich richtig verstehe. Nein. Es wird nach gewissen Regeln und etwas Zufall gezeichnet.
Zitat:

Also hast du die paint methode überschrieben oder so? Ich weiß leider nicht wie man das neuzeichnen triggert Traurig. Wenn du per Hand zeichnest könntest du auf dem Graphics Object fillRect bzw clearRect aufrufen um den gesamten Zeichenbereich des Panels mit der Hintergrundfarbe zu füllen.

Ich könnte mit ner Schleife sicher den ganzen Bereich so löschen. Ist aber vermutlich sehr ineffizent.
Oder ich mache ein Riesen- Rechteck. Mal testen.


Nimm clearRect und übergib den gesamten Panel-Bereich, dann sollte das gesamte Panel mit der Hintergrundfarbe überschrieben werden.
Habe ich anders gelöst
Zitat:


Zitat:

Hmm. Das funktioniert fast. Wenn run() nicht läuft(ruft ständig repaint auf) funktionierts nicht.
Desweiteren stürzt bei jedem Versuch run() über einen Button aufzurufen ab. run() greift auf ein paar Methoden zu. Sollten die in den Konstruktor?


Post mal code (besser zu viel als zu wenig: run, constructor, actionlistener, ...). Wahrscheinlich ist irgendwo eine endlosrekursion versteckt
Du bekommst eine PM.
_________________
Trish:(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ragmaanir
Fieser Necessitator



Anmeldungsdatum: 12.06.2005
Beiträge: 833
Wohnort: Hamburg

Beitrag(#1373769) Verfasst am: 07.10.2009, 16:13    Titel: Antworten mit Zitat

Ok, also der Fehler ist, dass du in der run-methode eine Endlosschleife hast. Am Ender der static void main ist das nicht schlimm, aber wenn du eine Endlosschleife in einem ActionListener aufrufst, dann wird die Kontrolle nicht mehr an die GUI zurückgegeben. Eigentlich sollten ActionListener nur kurze Aktionen enthalten. Wenn ein längerer Prozess ablaufen soll, so kann man das über einen separaten Thread lösen.

Hier ein Beispiel (sollte direkt funktioniere, tuts bei mir jedenfalls):

Code:

import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;


public class GuiTest {
   
   private JButton startButton = new JButton("start");
   private JButton stopButton = new JButton("stop");
   private JFrame frame = new JFrame();
   private Thread simulator = null;
   private boolean running = false;
   
   public GuiTest(){
      buildUI();
   }
   
   protected void buildUI()
   {
      startButton.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e){
            //while(true); // <-- diese Anweisung würde die GUI einfrieren
            startButton.setEnabled(false);
            startSimulation();
         }
      });
      stopButton.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e){
            running = false;
         }
      });
      frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
      frame.getContentPane().setLayout(new FlowLayout());
      frame.getContentPane().add(startButton);
      frame.getContentPane().add(stopButton);
      frame.setSize( 200, 100);
   }
   
   public void show(){
      frame.setVisible( true );
   }
   
   protected void startSimulation(){
      if(running) return;
      
      running = true;
      simulator = new Thread(){
         public void run(){
            stopButton.setEnabled(true);
            
            while(running){
               System.out.println("calculation"); // do calculations
               try{sleep(1000);}catch(Exception e){}
            }
            
            startButton.setEnabled(true);
            stopButton.setEnabled(false);
         }
      };
      
      simulator.start();
   }

   public static void main (String args[]) {      
      GuiTest gui_test = new GuiTest();
      gui_test.show();
   }
}


buildUI: Registriere ActionListener bei den Buttons, füge Buttons zum Frame hinzu, setze größe vom Frame, etc
startSimulation:
Hier wird ein neuer Thread erzeugt.
Code:

Thread t = new Thread(){
  public void run(){ [...] }
}

erzeugt eine anonyme Klasse (eine Klasse die keinen Namen hat, weil sie sowieso nur einmal verwendet wird. Man spart sich damit das Anlegen einer extra Klasse die sowieso nur ein 3-Zeiler ist. Außerdem kann man member-variablen und methoden der einschließenden Klasse referenzieren). Das ist ungefähr das gleiche wie dies:
Code:

class MyThreadWithAName extends Thread{
  public void run(){ [...] }
}
[...]
Thread t = new MyThreadWithAName();

(Dasselbe prinzip habe ich oben bei den ActionListenern verwendet: Anstelle für jeden ActionListener eine eigene Klasse anzulegen, wird einfach eine Anonyme Klasse erzeugt)

Mit t.start(); wird der Thread gestartet, so dass er paralell zum GUI Thread läuft. Die Kontrolle wird dann, nachdem der Thread erzeugt wurde, wieder an die GUI zurückgegeben, so dass die GUI weiter Nachrichten (Button-Clicks, resize, repaint, etc) verarbeiten kann. Deswegen funktioniert dann der stop-Button auch. Wenn der stop-Button gedrückt wird, wird running auf false gesetzt. Der Thread der im Hintegrund läuft und deine simulation/berechnung macht, bemerkt, dass running jetzt false ist und beendet sich (indem die run-method das Ende erreicht).
_________________
Dieser Post enthält die unumstößliche, objektive Wahrheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Wolf
registrierter User



Anmeldungsdatum: 23.08.2004
Beiträge: 16610
Wohnort: Zuhause

Beitrag(#1373872) Verfasst am: 07.10.2009, 18:30    Titel: Antworten mit Zitat

Danke hat mir sehr geholfen.
So jetzt muss ich erstmal für Ordnung sorgen.
_________________
Trish:(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen   Drucker freundliche Ansicht    Freigeisterhaus Foren-Übersicht -> DAU's Paradise Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Impressum & Datenschutz


Powered by phpBB © 2001, 2005 phpBB Group