Announcement

Collapse
No announcement yet.

ProgressBar und JEditorPane

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ProgressBar und JEditorPane

    Hallo,<br><br>ich möchte einen File in einen JEditorPane einlesen und den Anwender mittels der Anzeige eines ProgressBar in der Statuszeile über den Fortschritt (z.B. bei grossen Files) informieren. Kann mir jemand einen Tip geben, wo ich Sourcecodebeispiele für dieses Problem finden kann? Ich habe keinen Einfall wie ich die bereits verarbeiteten Characters bestimmen kann, so daß ich den ProgressBar mit dieser Information versorgen kann. Ohne den ProgressBar habe ich dem Konstruktor des JEditorPane über einen FileInputStream direkt den File übergeben - jedoch habe ich hier keine Möglichkeit, den Stream zur Bestimmung der bereits verarbeiteten Bytes zu analysieren. An manchen Stellen finde ich auch Hinweise, daß man einen <i>SwingWorker</i> einsetzen muß; was ist damit gemeint?<br><br>Wäre für Hilfe wirklich dankbar...<br>Martin

  • #2
    Hallo Martin,<br>
    SwingWorker ist eine Verarbeitungsklasse als Thread, die Du von der<br>
    Java Developer Connection bekommst (nicht Bestandteil des JDK).<br>
    Damit kann man zeitintensive Arbeiten in einen eigenen Thread auslagern, <br>
    so dass der AWT-Dispatch-Thread, in dem normalerweise per Buttonklick<br>
    z.B. die Aktion gestartet wurde, nicht blockiert ist.<br>
    Wenn Du den Stream analysieren willst, z.B. Progressbar-Fortschaltung<br>
    alle X-Zeilen, dann musst Du die Zeilen in einen StringBuffer kopieren<br>, der vorher mit der Filegrösse initialisiert wurde.<br>
    Das Ganze geschieht in einem SwingWorker Thread, aus dem heraus der<br>
    JProgressBar mit SwingUtilities.invokeLater(new Runnable(...)) modifiziert<br>
    werden muss! Anschliessend wird dem Constructor von JEditorPane der<br>
    StringBuffer.toString() übergeben. Oder JEditorPane.setText(s) benutzen.<br>
    Das Ganze geht natürlich stark<br>
    auf den Arbeitsspeicher und klappt nur bei moderater Filegrösse, es<br>
    sei denn, Du verfügst über genügend RAM und benutzt java -Xm128m z.B.
    <p>
    Gruss Klau

    Comment


    • #3
      Hallo Martin,<br>
      noch eine Eränzung zu Thread #1:
      In SwingWorker.construct() liest Du Dein File ein und modifizierst<br>den ProgressBar mit SwingUtilities.invokeLater.<br>
      In SwingWorker.finished setzt Du den ProgressBar auf Maximum OHNE<br>
      SwingUtilities.invokeLater. Du bist dort schon im richtigen Thread.
      <p>
      Klau

      Comment

      Working...
      X