paint(Graphics g) { unbekannt in try{} / catch{} }?

Status
Nicht offen für weitere Antworten.

Dilandau

Aktives Mitglied
warum kann drawString in try und catch nimmer aufgelöst werden?

Code:
  public void paint(Graphics g) {

      HIER FUNKTIONIERT g.drawString NOCH
 

    try {

      String aLine = "";

      URL text = new URL(getCodeBase(), "tanach.txt");

      BufferedReader br = new BufferedReader (new InputStreamReader(text.openStream()));

      int vn; //verse number

      while(null != (aLine = br.readLine())) {

        vn++;
	g.drawString(vn, 0,0);             <<<--------------- .drawString HIER UNBEKANNT


      }

      br.close();

    }

    catch(IOException e) {
      //Graphics g = this.getGraphics();
      //g.drawString(getMessage(e), 0, 0);            <<<----- das selbe
    }

  }
 
B

Beni

Gast
Du liest in einem Paint-Aufruf eine Datei aus???

Eigentlich geht es beim paint-Aufruf darum, so schnell wie möglich zu zeichnen...
Mein Vorschlag: lies die Datei in einem eigenen Thread ein, und speichere sie z.B. in einem Vector.

Code:
public class MyPanel extends Panel{
  private Vector data = new Vector();
  private Exception exception;

  public void read(){
    Thread thread = new Thread(){
       public void run(){
          try{
            ...  // InputStream aufrufen
            while(null != (aLine = br.readLine())) {
              data.add( aLine );
              repaint();
            }
            ... // InputStream schliessen
          }
          catch( IOException ex ){
            exception = ex;
          }
       }
    }
    thread.start();
  }

  public void paintComponent( Graphcis g ){
    if( exception == null )
      g.drawString( data.size(), 0, 0 );
    else
      g.drawString( exeption.getMessage(), 0, 0 );
  }
}

Gruss Ben
 

Dilandau

Aktives Mitglied
das mit dem paint war nur ein versuch, so schnell wie machbar etwas zu sehen von der datei. das programm soll letztendlich nur auf kommando von aussen überhaupt anfangen, etwas zu zeichnen (und vielleicht beim resizen des fensters zu refreshen).
gut wenn die datei schon im hintergund geladen wurde. wenn nicht, wie könnte das programm dann darauf warten, vor dem zeichnen? oder wers ganz flexibel mag, es wird dann nur bis da gezeichnet, wieviel schon geladen worden ist, dann gehts etwas langsamer weiter. die datei ist aber nicht lang und der eigentliche beabsichtigte parsvorgang beim zeichnen aber verhältnisg sehr komplex, so daß ladezeiten kaum deutlich werden. denkbar wäre, die datei im hintergrund einmal parsen zu lassen, bevor überhaupt irgendwas getan werden kann.

startet der read thread automatisch oder muss ich den manuel aufrufen?

btw, warum exception private und nicht static?
 
B

Beni

Gast
Ach so, das erklärt einiges.

Du musst einfach dafür sorgen, dass im Paint-Aufruf nur noch gezeichnet werden kann. Alle Berechnungen sollten schon im voraus gemacht sein.
Und wenn die Berechnungen nicht fertig sind: nicht warten, sondern nur den Teil zeichnen, den du schon hast.

Nur so kannst du verhindern, dass du ein graues Fenster bekommst (Ein Programm mit einem grauen Fenster wird von jedem User gelöscht...)

read() musst du noch aufrufen.

wieso nicht static: andere Frage, wieso sollte es static sein? Was für einen Sinn hätte das?
Es könnte sein, dass du irgendwann mal mehrere Dateien laden willst. Wenn dann einmal eine Exception auftritt, würden alle Panels diesen Fehler melden... macht irgendwie keinen Sinn.

Verzichte wann immer möglich auf static, hat sich bewährt :wink:

Gruss Beni
 

Dilandau

Aktives Mitglied
was ist unterschied von private und static? das eine sieht mir wie eine alternative zu public aus, während static die variable für alle meine routinen verfügbar macht. private impliziert aber anscheinend static, da du die variable in einer unterroutine benutzt??

für kurzweil ist in jedem fall gesorgt, da das applet sofort nach dem laden sich weiss macht und ein paar vielversprechende default-kreise präsentiert, deren geheiminisse nur darauf warten, mit user-eingaben entdeckt zu werden.

wie soll ich read() aufrufen, etwas von init()? später aber mal auch von javascript, sobald da eine andere als die default datei ausgewählt worden ist. das read muss aber, sofern ich das verstanden habe, sofort zurückkehren udn der thread löppt von selbst, ist das so?

wenn der teil, den ich schon habe, gezeichnet worden ist, wie warte ich dann auf den rest? da kann ich gleich selber laden.

paint() wirds vielleicht garnicht geben, da nur auf kommando etwas gezeichent werden soll. es seidenn die berechnungen werden im hintergrund gemacht. aber da gibts keine default werte für sondern die sind eingaben abhängig und müssen dann vom user gestartet werden. und damit können auch erst die zeichnungen starten.

vorher parsen kann man die datei aber schon lassen, das könnte was bringen. quasi umwandeln in eine form, die für die berechnungsroutine leichter verständlich ist.
 
B

Beni

Gast
Uaaa, static hat nicht sehr viel mit private oder public zu tun.

Es gibt verschiedene Typen von Variablen: Instanzvariablen und Klassenvariablen.

Die Instanzvariable (ohne static) ist an eine Instanz der "umschliessenden" Klasse gebunden.
Beispiel:
Code:
public class Point{
  public int x, y;
}
Wenn du 15 Points initialisierst ( mit new Point() ) dann existieren 15 x's und 15 y's.

Die Klassenvariable (mit static) ist an die Klasse gebunden, und unabhängig von den Instanzen. Da es eine Klasse nur einmal gibt, gibt es auch jede Klassenvariable nur einmal im Programm.
Beispiel:
Code:
public class Point{
  public int x, y;
  public static int nPoints = 0;

  public Point(){  nPoints++ };
}

Das Beispiel kannst du ausprobieren: initialisiere mal 5 Punkte (mit verschiedenen Koordinaten). Du wirst bemerken, dass die Koordinaten aller Punkte verschieden sind, aber dass die Variable nPoints überall denselben Wert hat.

Und schau dir mal diesen Thread an


privat, protected und public geben dagegen an, wer Zugriff auf eine Variable (oder Methode) hat. z.B. eine private-Variable kann nur innerhalb der Klasse benutzt werden, in der sie deklariert ist. (Schau dir den Link an).

Also: ich muss mal kurz meine Gedanken erklären, die ich hatte als ich diesen Beispielcode schrieb:
Ich hatte es so verstanden: du liest eine Datei aus, und willst dem Benutzer zeigen, wieweit du schon bist. (Darum wird immer wieder die Anzahl gelesener Linien ausgedruckt).
Das fand ich ein bisschen *naja* (auch jetzt noch :wink: ), und darum dachte ich: Schreib ich ein kleines Beispiel, bei dem ein Teil des Codes die Datei lädt, und der andere Teil den Fortschritt zeichnet. Das ist aber auch alles, was dieses Codestück kann.

Es ist so, wie du es schreibst: read() kehrt sofort zurück, und die Datei wird einfach mal so nebenbei geladen.
Der Thread loopt. Wenn ich dich richtig verstehe, ein paar Sekunden.

In der Paint-Methode sollte man gar nicht warten: da lässt du lieber einen Teil grau. So im Sinne if( alleDaten ){ zeichne schöne } else { zeichne klein }

Gruss Beni
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Probleme mit paint() aus java.awt.Graphics Java Basics - Anfänger-Themen 2
Dogge Problem mit paint(Graphics g) im Applet Java Basics - Anfänger-Themen 13
J Problem mit paint(Graphics g) Java Basics - Anfänger-Themen 4
K Problem mit Parameter von paint(Graphics g) Java Basics - Anfänger-Themen 3
T rotes herz public void paint(Graphics g) Java Basics - Anfänger-Themen 2
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
S awt: paint Methode zeigt nichts an Java Basics - Anfänger-Themen 9
S Paint Anwendung: Freihandlinien zeichnen Java Basics - Anfänger-Themen 4
S Erste Schritte drawOval Problem in Paint Anwendung Java Basics - Anfänger-Themen 1
R Begrenzer Anzahl von paint() ? Java Basics - Anfänger-Themen 3
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
thet1983 start & paint Methode? Java Basics - Anfänger-Themen 0
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
D Wert einer Variable in paint-Methode verwenden Java Basics - Anfänger-Themen 2
OnDemand Berechnung in die start und paint Methode eines Applets Java Basics - Anfänger-Themen 28
T Vererbung Wann wird die Methode paint aufgerufen? Java Basics - Anfänger-Themen 4
L Paint() wird scheinbar nicht richtig ausgeführt Java Basics - Anfänger-Themen 8
N aus Container components paint Java Basics - Anfänger-Themen 2
J paint() vs repaint() Java Basics - Anfänger-Themen 3
A Problem mit paint() Java Basics - Anfänger-Themen 2
A Aufruf der paint() Methode Java Basics - Anfänger-Themen 3
L Erste Schritte Swing oder SWT Paint mit Grafikkarte? Java Basics - Anfänger-Themen 7
T paint() wird nicht aufgerufen Java Basics - Anfänger-Themen 2
K paint() mit einfügen Java Basics - Anfänger-Themen 14
K doppeltes paint beim Drucken Java Basics - Anfänger-Themen 8
J paint-methode blockiert settings von JComponents Java Basics - Anfänger-Themen 5
F Eine Frage über paint() Funktion Java Basics - Anfänger-Themen 2
S [Applet] Objekte von init bei paint benutzen Java Basics - Anfänger-Themen 9
R Methoden Zeichnen auf Button-Druck durch Paint-Methode Java Basics - Anfänger-Themen 2
W repaint() ruft paint() nicht auf Java Basics - Anfänger-Themen 9
J Zweimal im gleichen Paint-Fenster malen Java Basics - Anfänger-Themen 8
A paint() methode von externer Klasse aufrufen Java Basics - Anfänger-Themen 3
J Paint Methode von JPanel aufrufen Java Basics - Anfänger-Themen 15
V paint funktioniert nicht Java Basics - Anfänger-Themen 14
Q Zeichnen außerhalb der paint-methode Java Basics - Anfänger-Themen 7
O Paint Programm mit Fehler Java Basics - Anfänger-Themen 2
A Methoden Variablen in paint methode Java Basics - Anfänger-Themen 4
Y im applet malen ohne repaint paint ? Java Basics - Anfänger-Themen 6
S Datentypen Paint Programm Java Basics - Anfänger-Themen 7
M paint-Methode funzt nicht Java Basics - Anfänger-Themen 11
L Paint zeichnet nicht gespeicherte Objekte Java Basics - Anfänger-Themen 3
D OOP paint() Methode aus Unterklasse anstoßen Java Basics - Anfänger-Themen 3
A paint() - warum nicht aufrufen? Java Basics - Anfänger-Themen 3
K Scrollbar - Bild - paint-Methode - zoom Java Basics - Anfänger-Themen 10
S super.paint() Java Basics - Anfänger-Themen 4
S Bild aus paint() Methode auslagern Java Basics - Anfänger-Themen 14
T Etwas an paint()-Methode übergeben? Java Basics - Anfänger-Themen 6
TheKing Paint-Methode aufrufen Java Basics - Anfänger-Themen 14
N paint methode statt Event-Handling-Methode Java Basics - Anfänger-Themen 3
M Paint und JColorChooser Java Basics - Anfänger-Themen 12
G hintergrund wird nicht gezeichnet bei paint() Java Basics - Anfänger-Themen 3
H Paint Methode malt nicht im Panel Java Basics - Anfänger-Themen 4
S Frage zur paint-Methode Java Basics - Anfänger-Themen 3
B Applet: Event-Handling-Methode in start- bzw. paint-Methode Java Basics - Anfänger-Themen 7
G Nichtstatische Objekte in der paint()-Methode Java Basics - Anfänger-Themen 16
K Wieso wird "paint" nicht ausgeführt ? Java Basics - Anfänger-Themen 2
K JPanel, JFrame, paint() und wo ist mein Viereck ? Java Basics - Anfänger-Themen 19
F Frage zu JPanel und Paint Java Basics - Anfänger-Themen 5
P paint Methode Java Basics - Anfänger-Themen 3
M Problem mit paint() und Container. Java Basics - Anfänger-Themen 8
B Paint(Component) und externe Objekte Java Basics - Anfänger-Themen 6
F Applets und die paint-Methode Java Basics - Anfänger-Themen 3
G frage zu paint Java Basics - Anfänger-Themen 3
T Mehrere paint Methoden in unterschiedlichen Klassen Java Basics - Anfänger-Themen 7
G start-oder paint-Methode anstatt Event-Handling-Methode? Java Basics - Anfänger-Themen 3
G Hilfe in paint() ; zeichnen Java Basics - Anfänger-Themen 15
C Einfaches Paint-Programm Java Basics - Anfänger-Themen 9
T .paint() aufrufen Java Basics - Anfänger-Themen 23
S Paint Teilweise Zeitverzögert Java Basics - Anfänger-Themen 6
R paint problem Java Basics - Anfänger-Themen 6
G mit paint() ins JPanel malen. Java Basics - Anfänger-Themen 6
M Auf Panels oder Labels malen? (paint) Java Basics - Anfänger-Themen 9
G repaint in paint aufrufen? Java Basics - Anfänger-Themen 9
V paint()-methode manuell aufrufen? kein autostart erwuenscht Java Basics - Anfänger-Themen 3
B Problem mit Einfügen von Choice (in ein Applet) aus Paint Java Basics - Anfänger-Themen 13
7 In Paint keine Schleife? Java Basics - Anfänger-Themen 13
T paint() wieder aus einder anderen methode aufrufen funzt nid Java Basics - Anfänger-Themen 2
G Paint auf Panel Java Basics - Anfänger-Themen 4
G Paint Methode löscht alles Java Basics - Anfänger-Themen 4
S paint() direkt auf JFrame seit 1.5 nicht mehr möglich? Java Basics - Anfänger-Themen 5
A Variablenübergabe in die Paint-Funktion Java Basics - Anfänger-Themen 4
D Zeichnen mit Paint zerstört ganzes Fenster Java Basics - Anfänger-Themen 5
G Klassen und paint methode Java Basics - Anfänger-Themen 2
T paint() ohne konstruktor aufzurufen? Java Basics - Anfänger-Themen 5
P paint() Java Basics - Anfänger-Themen 6
U paint Java Basics - Anfänger-Themen 8
X Malen außerhalb der paint() Methode Java Basics - Anfänger-Themen 4
C zu viele paint()'s. Java Basics - Anfänger-Themen 6
G Zeichnen ausserhalb der paint Methode Java Basics - Anfänger-Themen 4
V Problem mit der Anzeige einer paint-Methode in einem Panel Java Basics - Anfänger-Themen 2
N Probleme mit paint() bei Implementierung in ein Panel Java Basics - Anfänger-Themen 4
D von paint() und repaint() im Applet Java Basics - Anfänger-Themen 4
C Ausgaben mit der Paint-Methode Java Basics - Anfänger-Themen 5
M HILFE JPanel - Graphics Java Basics - Anfänger-Themen 1
H Eingabe tätigen bevor Graphics g Fenster öffnet Java Basics - Anfänger-Themen 5
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
J Erste Schritte drawLine Methode der Graphics Klasse Java Basics - Anfänger-Themen 2
J GUI / Graphics Java Basics - Anfänger-Themen 2
H Graphics / repaint Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben