eigener Thread für einen JButton

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Hallo,

Ich habe eine JToolBar und auf dieser JToolBar befindet sich ein JButton;

Code:
private JToolBar btPanel; 

 btTree.setFocusable(false);
        btTree.setMaximumSize(new Dimension(22, 120));
        btTree.setBackground(new Color(230, 230, 230));
        btTree.setForeground(new Color(100, 100, 100));       
        btTree.setIcon(graphicIcon);                  
        btTree.setEnabled(false);        
        btPanel.add(btTree);
        btPanel.addSeparator();
        btTree.addMouseListener(this);

Wenn ich jetzt über diesen Button btTree fahre, klappt sich ein JPanel aus,

Wenn sich jetzt einiges in meiner Applikation tut, dann braucht es etwas länger, bis das JPanel "ausfährt", wenn ich mit der Maus über den JButton btTree fahre,

Meine Frage wäre jetzt, was ich da machen kann bzw. wie ich das Ganze in einen eigenen thread gebe,

Vielen Dank,

lg
 

*Hendrik

Bekanntes Mitglied
Vielleicht solltest Du das, was sich in der Applikation tut (Berechnungen, Daten holen o.ä.) in einem Thread/SwingWorker machen?
 

PollerJava

Top Contributor
Naja da tut sich sehr viel, leichter wäre es für mich, ich könnte das ausklappen des JPanels in einen eigenen Thread geben,

Ich habe ein Objekt von einer Klasse und dieses Objekt benötigt je nachdem sehr viele Resourchen, wie kann ich eine ganze Klasse (Objekt) in einen eigenen Thread stecken,

lg
 

PollerJava

Top Contributor
ja, dann habe ich die run()- Methode in der Klasse und was mche ich mit den anderen Methoden in der Klasse,

Die Methoden meiner Klasse werden von einem anderen Objekt aufgerufen,

Steh a bissl auf dem Schlauch,

lg
 

Wildcard

Top Contributor
Wenn du das auslagerst ist das Verhalten deiner Applikation unbestimmt. Alles was die GUI verändert muss im EDT stattfinden. Wenn ein anderer Thread die GUI verändert, muss das über die SwingUtilities in den EDT verschoben werden.
 

PollerJava

Top Contributor
Nö ich kappiers nicht,

Ich mache mir eine Klasse, in der drinnensteht, was im Hintergrund/in einem eigenen Thread zu machen ist also in meinem Fall, dass sich ein JPanel aufmacht, wenn ich über eine JButton fahre,
Ich weiß aber überhaupt nicht wie ich das machen soll,
Momentan habe ich in meiner Klasse den den MouseListener implementiert und in der Methode mouseEntered wird das JPanel ausgefahren:

Code:
public class JTreeFrame extends javax.swing.JFrame implements MouseListener, MouseMotionListener
{

...

public void mouseEntered(final MouseEvent e) 
        {
        Object source = e.getSource();
        if(source == btTree) {
            s.setVisible(true);
            s.setBounds(28, 0, Control.getStatesElementAt(0).getJtreewidth(), getSize().height-30);
            validate();
            }
        }

}

Kann ich das irgendwie einfach umändern?

Vielen Dank für die Antworten
 

HLX

Top Contributor
PollerJava hat gesagt.:
Wenn sich jetzt einiges in meiner Applikation tut, dann braucht es etwas länger, bis das JPanel "ausfährt"

Was tut sich denn in deiner Applikation? Vielleicht kann man ja das (falls es swing-fremd ist) in einen eigenen Thread auslagern.
 

thE_29

Top Contributor
Ich kann die von AlArenal mal gezeigte foxtrot API verweisen!
Die ist ein Hammer und von den return Werten besser als SwingWorker!

Einfach mal im Board oder google suchen ;)
 

Wildcard

Top Contributor
Wenn es nicht um Berechnung von Daten oder IO Operationen geht, dann ist da werder mit SwingWorker, noch Foxtrott, noch sonstwas etwas zu ändern. GUI Operationen nur im EDT.
 

thE_29

Top Contributor
Jo, GUI Dinger gehören schon im EDT!
Aber wennst halt intensive Rechenoperationen machen willst kannst halt Threads, SwingWorker oder foxtrot nutzen (außer wenn man bei JLabel´s den Text ändert, das Teil ist Threadsafe ;))
 

PollerJava

Top Contributor
Könnt ihr euch das erklären, dass ich auf meinem JFreeChart ein paar Linien plaziere und dann fährt mir das JPanel von der JToolBar (wenn ihc über den JButton fahre) viel langsamer aus als wenn ich keine Linien auf dem JFreeChart habe,

Ich hätte ja gesagt, wenn ich am JFreeChart nichts mache (aufend aktualisieren usw. ) dann sollte das für das Ausfahren des JPanels keinen unterschied machen, oder sehe ich da was falsch?

lg
 

Marco13

Top Contributor
Ja, Swing-Operationen nur im EDT, aber trotzdem kann man das, was er vorhat, doch in einem eigenen Thread machen, wenn die entscheidene Operation dannn wieder in den EDT geschedult wird...
Code:
void fahrDasPanelAus()
{
    Thread t = new Thread(new Runnable())
    {
        public void run()
        {
            for (int i=0; i<panelSize; i++)
            {
                SwingUtilities.invokeLater(new Runnable()
                {
                    public void run()
                    {
                         panel.setSize(100, i);
                    }
                }
                try { Thread.sleep(20); } catch (InterruptedException e) {}
            }
        }
    }
    t.start();
}
 

Marco13

Top Contributor
@PollerJava: Das Ausfahren ist vermutlich deswegen so langsam, weil bei jedem Ausfahr-Schritt neu gezeichnet werden muss. Und wenn es daran nicht liegt, dann vielleicht daran, dass bei jedem Schritt das Layout aktualisiert wird. Man könnte was rum-hacken, z.B. den Fertigen chart in ein BufferedImage malen, und nur DAS dann "animieren", aber ... hm :?
 

HLX

Top Contributor
Marco13 hat gesagt.:
Ja, Swing-Operationen nur im EDT, aber trotzdem kann man das, was er vorhat, doch in einem eigenen Thread machen, wenn die entscheidene Operation dannn wieder in den EDT geschedult wird...
Code:
void fahrDasPanelAus()
{
    Thread t = new Thread(new Runnable())
    {
        public void run()
        {
            for (int i=0; i<panelSize; i++)
            {
                SwingUtilities.invokeLater(new Runnable()
                {
                    public void run()
                    {
                         panel.setSize(100, i);
                    }
                }
                try { Thread.sleep(20); } catch (InterruptedException e) {}
            }
        }
    }
    t.start();
}

Das geht schon. Ist die Frage ob man damit was erreicht. Ich würd´s dann eher mal mit "invokeAndWait" probieren.
 
T

tuxedo

Gast
Oder nen schnelleren Rechner nehmen ;-)

Was für ne Kiste ist es denn?

- Alex
 

PollerJava

Top Contributor
HP, 1.86GHz, 1GB Ram, also nicht der Beste aber auch nicht s langsam,

Ich entwickle ja für Kunden, welche sicher einen langsameren Rechner haben und daher ist es ganz gut, wenn ich da auf meinem Rechner ein bischen optimiere,

lg
 

PollerJava

Top Contributor
Also das Ausfahren des JPanels in einen eigenen Thread geben, hilft nichts, da blockiert das Programm irgendwo anders,
 
T

tuxedo

Gast
Du solltest das ganze logisch angehen. Allem anschein nach ist dein Chart die "langsame" Komponente. Weißt du ob JFreeChart denn 2D Beschleunigung nutzt? Kann/muss man das vielleicht erst einschalten? Was ist mit Anti-Aliasing?

Generell:

Wenn du zwei Komponenten hast, A und B, und eine der beiden so langsam ist, dass sie die andere ausbremst, solltest du der bremsenden Komponente vielleicht ein niedrigere Priorität geben, damit der Rest schneller/unabhängig läuft.

Den "Rest" in einen gleichberechtigten Thread stecken macht's doch nicht besser?

- Alex
 

PollerJava

Top Contributor
alex0801 hat gesagt.:
Weißt du ob JFreeChart denn 2D Beschleunigung nutzt? Kann/muss man das vielleicht erst einschalten? Was ist mit Anti-Aliasing?

niedrigere Priorität geben, damit der Rest schneller/unabhängig läuft.

- Alex

Also von 2D Beshcleuningung habe ich im Zusammenhang mit dem JaFreeChart noch nie etwas gehört, weißt du da ein Stichwort dazu oder weißt Du wie man das einschaltet?

Von Anti- Alising im Zusammenhang mit dem JFreechart habe ich auch noch nie etwas gehört,
Und wie geben ich dem ausklappen des JPanels eine höhere Prior?

Fragen über Fragen???

vielen Dank für Eure Antw.

lg
 
T

tuxedo

Gast
Du hast's noch nicht begriffen... Du solltest nicht dem ausklappenden Button eine höhere Priorität geben. Bsp:

Prio 1 wird schneller bearbeitet als Prio 10.

Angenommen alle deine Threads (auch die in Swing und Co.) haben Prio 5. Und jetzt gibst du deinem Button Prio 1.. Was passiert? Dein Button reagiert jetzt zwar viel schneller, aber der rest der Anwendung kriecht noch zusammen mit dem JFreeChart "hinterher".

Entkoppelst du jetzt das langsame "vom Rest", so müsstest du lediglich dein JFreeChart eine langsamere Priorität (>5) geben. Somit hätte alles andere "vorrang".

Du solltest mal versuchen wie weiter oben von den anderen schon geschrieben, dein JFreeChart und das damit zusammenhängende "zeichnen der Kurven/Diagramme" in einen extra Thread auszulagern.

Zur Thread-Priorität: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html#setPriority(int)

Bzgl. 2D Beschleunigung: Soweit ich das jetzz in Erfahrung gebracht habe nutzt JFreeChart schon Java 2D (und das ist auch dein Stichwort: Java 2D). Die Sache mit Anti-Alliasing (kantenglättung): Klar dass du davon noch nix gehört hast. Kommt ja nicht jeden Tag einer auf dich zu und sagt: Hey, hast du schon die Sache mit AA in Bezug auf JFreeChart mitbekommen? Musst du schon selbst Nachschlagen. Wenn in der JFreeChart Doku nix erwähnt ist hast du entweder Pech, oder du musst selbst Hand anlegen ;-)

Fragen über Fragen? Ne, eigentlich nicht, sofern man gegen 09:30 schon wach genug ist um sein Hirn anzustrengen ;-)

Gruß Alex
 

PollerJava

Top Contributor
alex0801 hat gesagt.:
Fragen über Fragen? Ne, eigentlich nicht, sofern man gegen 09:30 schon wach genug ist um sein Hirn anzustrengen ;-)

Gruß Alex


Wach genug!??? habe leider keine Gleitzeit, was ich persönlich ja eines der größten Undinge finde bei einer kreativen Arbeit wie dem Programmieren, das heißt, dass ich jeden Tag gut drauf sein muss in der Arbeitszeit!!! Ich mutiere eh gerade vom Menschen zur Maschine,
 
G

Guest

Gast
Oh man, mir kommen gleich die Tränen. Wie unmenschlich doch das böse böse System der bösen bösen Kapitalisten in Deutschland ist oder? Du solltest echt aufwachen :lol:

Diese unmenschliche Tierhaltung ist mehr als normal und wie ich finde auch nicht so ungerechtfertigt. Irgentwann muss man mal wach werden und arbeiten. Angenommen du würdest von 14 bis 15 Uhr arbeiten, dann wärest du irgentwann um 14 Uhr so müde wie jetzt um 8 ;)

Und ob programmieren tatsächlich sooo eine kreative Arbeit ist, wenn man bei den kleinsten Problemen sich dem Internet bedient (was ja garnicht unbedingt verwerflich ist), ist fraglich. Dafür wurde der Begriff hacken eingeführt ;) Heutzutage muss man sich, was Java angeht, nurnoch Schnipsel zusammensuchen, anwenden und verbinden. Das ist wie puzzlen. Findest du nicht?
 
T

tuxedo

Gast
Tolle Wurst. Ich hab Gleitzeit... Und was hab ich davon? Ich muss dennoch um 06:00 aufstehen damit ich rechtzeitig zur Regulärzeit im Büro bin. Ist also nicht wirklich ne "Ausrede" ;-)
 

PollerJava

Top Contributor
Sollte keine Ausrede sein, nur ich steh um 5 auf und arbeite bis 20 uhr und studiere am we noch, und das seit 3 Jahren, dann noch Freundin usw,
Da würd ich mir halt wünschen, das Ganze etwas flexibler einteilen zu können, aber ich nimms eh wies kommt,

lg

(Tränen sind überFLÜSSIG)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JavaDocu in eigener Bibliothek Allgemeine Java-Themen 2
HarleyDavidson Eigener PropertyChangeListener funktioniert einfach nicht Allgemeine Java-Themen 3
T Datei öffnen mit eigener Applikation.exe Allgemeine Java-Themen 4
D Arraylist eigener Klasse an iReport übergeben Allgemeine Java-Themen 7
K Jar mit eigener JRE ausliefern Allgemeine Java-Themen 13
G eigener PropertyChangedListener Allgemeine Java-Themen 2
S OOP ClassCastException bei casting von eigener Klasse aus Iterator Allgemeine Java-Themen 3
V Serialisierung von Instanz eigener Klasse Allgemeine Java-Themen 5
N Vergleich eigener Klassen Allgemeine Java-Themen 5
T Vererbung Eigener Datentyp: Betriebsmittel Allgemeine Java-Themen 2
J Erste Schritte Kommerzielle nutzung eigener Javaapplets auf der Homepage Allgemeine Java-Themen 2
B Probleme mit eigener equals Methode Allgemeine Java-Themen 18
Kr0e Eigener Updatemechanismus Allgemeine Java-Themen 7
J Mein eigener Messenger und dessen Probleme Allgemeine Java-Themen 48
S Profiler-Funktionen in eigener Applikation nutzen..? Allgemeine Java-Themen 5
R Eigener Comparator Allgemeine Java-Themen 2
T Zeit von einem Server/Webseite auslesen und in eigener GUI anzeigen Allgemeine Java-Themen 6
V Probleme mit eigener Hashmap Allgemeine Java-Themen 10
B Eigener ClassLoader Allgemeine Java-Themen 9
R Eigener Assoziativ-Speicher Allgemeine Java-Themen 7
T CP Problem: Webstart + Logging properties file + eigener Handler Allgemeine Java-Themen 7
P eigener Klassenname Allgemeine Java-Themen 4
D Eigener Key bei AES Verschlüsselung Allgemeine Java-Themen 4
T enums - eigener startwert Allgemeine Java-Themen 5
J Eigener ClassLoader wird nicht immer verwendet Allgemeine Java-Themen 3
F Checkbox in JTable , eigener Cellrenderer -wie gehts weiter? Allgemeine Java-Themen 2
A JRE auf eigener Seite verlinken oder zum Download anbieten? Allgemeine Java-Themen 13
E Wie: Eigener Listener, eigenes Event (möglichst einfach) Allgemeine Java-Themen 29
G eigener logger mittels classe (dynamische logfilename) log4j Allgemeine Java-Themen 15
D Eigener Maven2 Plugin Server? Allgemeine Java-Themen 3
I RSA - Eigener Quelltext Allgemeine Java-Themen 4
M eigener LautstärkeRegler schädlich für soundkarte? Allgemeine Java-Themen 4
K JTree plus eigener FileLoader Allgemeine Java-Themen 2
L Problem mit eigener, abgeleiteter Klasse Allgemeine Java-Themen 2
S Eigener Editor Allgemeine Java-Themen 7
L Eigener Onlinestunden- Zähler / Problemchen Allgemeine Java-Themen 2
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
smarterToby Wie stoppe ich diesen Thread Allgemeine Java-Themen 4
A Thread.sleep Problem Allgemeine Java-Themen 2
J Thread started nur einmal Allgemeine Java-Themen 19
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
OnDemand Logfile pro User / Thread Allgemeine Java-Themen 7
OnDemand Thread / Service abbrechen Allgemeine Java-Themen 3
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
P Swing Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: npoints > xpoints.length || npoints > ypoints.length Allgemeine Java-Themen 5
B Thread.sleep() in EJB Container wie lösen? Allgemeine Java-Themen 11
S Ist das Neuzuweisen von Feldern atomic und damit Thread-Safe? Allgemeine Java-Themen 2
S Exception in thread "main" java.lang.NullPointerException at FamilienApp.main(FamilienApp.java:15) Allgemeine Java-Themen 1
J Einen Thread in einer Schleife Allgemeine Java-Themen 2
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
Flynn Thread-Problem... Allgemeine Java-Themen 2
G Thread-Programmierung Allgemeine Java-Themen 5
S Datei wird nicht gefunden Thread.currentThread().getContextClassLoader().getResourceAsStream() Allgemeine Java-Themen 1
G Beendet sich der Thread selbst?! Allgemeine Java-Themen 3
mrbig2017 Sleep wird ignoriert und der Thread wartet nicht Allgemeine Java-Themen 1
S Thread beenden Allgemeine Java-Themen 9
M Array aus Thread Objekten erstellen Allgemeine Java-Themen 2
Aruetiise Swing JOptionPane ohne denn Thread zu pausieren Allgemeine Java-Themen 1
M Nanosekunden-Pause innerhalb einen Thread-Loops Allgemeine Java-Themen 3
E Thread Exception Allgemeine Java-Themen 6
javaerd Binomialkoeffizient ausrechnen, Exception in thread "main" java.lang.StackOverflowError Allgemeine Java-Themen 6
T Merkwürdiges Thread-Verhalten Allgemeine Java-Themen 6
K Thread Problem Allgemeine Java-Themen 6
W Thread sleep 30 sekunden - wenn keine Antwort bis dahin neu senden Allgemeine Java-Themen 2
H Thread bleibt stehen bei jar in jar Allgemeine Java-Themen 1
J Threads HTTP Request (Thread) dauert lange - in Android Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0
V Compiler-Fehler Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 125, Size: 125 Allgemeine Java-Themen 11
Tausendsassa Threads Einen Thread sich selbst schließen lassen Allgemeine Java-Themen 17
P Threads BufferedImage, Thread Concurrency Allgemeine Java-Themen 1
M Klasse in separaten Thread ausführen.Wie genau? Allgemeine Java-Themen 2
llabusch Thread blockiert Dialog Allgemeine Java-Themen 1
J Thread wait() Allgemeine Java-Themen 2
V Thread.sleep und InterruptedException? Allgemeine Java-Themen 1
G Thread nicht von GC zerstört Allgemeine Java-Themen 6
J Wie erschaffe ich einen sicheren Datenaustausch zwischen Thread und Nicht-Threads Allgemeine Java-Themen 8
Sogomn Thread blocken bis Taste gedrückt Allgemeine Java-Themen 5
T Starten vom Thread Allgemeine Java-Themen 3
T Wait/Notify() bei Thread Allgemeine Java-Themen 6
J Exception in thread "main" java.lang.NoClassDefFoundError Allgemeine Java-Themen 4
M Exception in thread "AWT-EventQueue-0" Allgemeine Java-Themen 6
Q Thread wacht nicht auf Allgemeine Java-Themen 7
T Fragen zum Thread-Thema Allgemeine Java-Themen 4
T Threads Input/Output im Thread - Datei ohne Inhalt Allgemeine Java-Themen 1
T Fragen zum Thread-Thema Allgemeine Java-Themen 9
C Threads Variablen in einem Thread Aktualisieren Allgemeine Java-Themen 17
U Thread beenden Allgemeine Java-Themen 3
W Threads Mit Thread und Runtime externe Programme öffnen Allgemeine Java-Themen 0
N Thread interrupt Status debuggen Allgemeine Java-Themen 6
A Thread: Code paralell ausführen in mehreren Instanzen Allgemeine Java-Themen 1
E Threads linkedlist/multi-thread problem Allgemeine Java-Themen 3
B Erkennen, wann Prozess beendet ist, dann Thread beenden. Allgemeine Java-Themen 6
A Thread Fehler absichtlich provozieren Allgemeine Java-Themen 3
B Threads Java Thread kommunizieren Allgemeine Java-Themen 12
N Thread Sicherheit im komplexen Datenmodell Allgemeine Java-Themen 7
K Thread richtig benutzen Allgemeine Java-Themen 3
K Exception in thread "AWT-EventQueue-1" Allgemeine Java-Themen 2
vandread Problem bei kleiner Thread-Übung Allgemeine Java-Themen 2
G Thread erzeugt nicht plausible NullPointerException Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben