Thread und JColorChooser?

Status
Nicht offen für weitere Antworten.
G

gastfrager

Gast
hallo ich versuche hier gerade, einen jcolorchooser in nem thread laufen zu lassen, geht aber nicht. hier die exception:



Exception in thread "Thread-8" java.lang.NullPointerException
at ColorThread.run(ColorThread.java:12)



so, ich hab den thread also schon ausgelagert, aber es geht einfach nicht. hier der code von colorthread.java:

Code:
import javax.swing.JColorChooser;
import javax.swing.JFrame;

class ColorThread extends Thread {
    
	public void run() {
		Color chatTextColor = JColorChooser.showDialog(new JFrame("colortest"), "Farbe des Chattextes", Color.ORANGE);
			
		System.out.println("color: " + chatTextColor);
		int red = chatTextColor.getRed(); //HIER KOMMT DIE EXCEPTION, da chatTextColor=NULL
		int green = chatTextColor.getGreen();
		int blue = chatTextColor.getBlue();

		String redHex = Integer.toHexString(0x100 | red).substring(1).toUpperCase();
		String greenHex = Integer.toHexString(0x100 | green).substring(1).toUpperCase();
		String blueHex = Integer.toHexString(0x100 | blue).substring(1).toUpperCase();

		String colorString = "#" + redHex + greenHex + blueHex;
		System.out.println(colorString);
		
	}
}

der colorchooser wird angezeigt, aber jedesmal, wenn ich mir die farbe ausgesucht hab und OK drücke, kommt die obige exception. ohne thread gehts ohne eprobleme. ist das ein bug der VM? ich hab das java 1.5 jdk 1.5.0_06 installiert, aber mit dem 1.5.0_04 gings auch nicht. mit dem 1.5.0 gehts...seltsam. ne idee?

danke für jeden hinweis!!
:)
 

Mag1c

Top Contributor
Hi,

unter 1.4.2 gehts auch :)

darf man mal fragen, wozu das ganze in einem Thread laufen soll ?

Gruß
Mag1c
 
G

gastfrager

Gast
weil das sonst den chat lahmlegt, da es kein normaler colorchooser ist (ist etwas komplexer). toll, dann ists ein fehler in der JVM...wie könnte man das denn noch machen? habs auch schon mit prioritäten probiert...

gruß
 
R

Roar

Gast
lol, ich würd den fehler erstmal bei dir suchen anstatt in java: wenn der benutzer abbrechen geklickt oder den dialog einfach geshclossen hat wird null zurückgeliefert, also vorher auf null überprüfen bevor du weitermachst.
 

Mag1c

Top Contributor
Hi,

der JColorChooser ist ein JComponent. Du kannst also auch einfach ein JFrame öffnen und dort eine Instanz von JColorChooser reinpacken. Musst dann nur noch die Buttons selbst drunterbaumeln, da die nur beim Dialog generiert werden. Das ganze sollte dann auch ohne Thread funktionieren und wäre auf jeden Fall sauberer.

Gruß
Mag1c
 
G

gastfrager

Gast
hi, ich will aber keine komponente selber bauen. wenn ich abbrechen klicke, dann kommt null, aber doch nicht, wenn ich ne farbe wähle und ok drücke...da es unter 1.5.0_0 läuft, nehm ich an, es liegt an der jvm...toll

gruß
 
R

Roar

Gast
ah, habs reproduzieren können. das liegt aber keineswegs an einem bug in der jre ;) swing ist nicht threadsicher, dein showDialog() muss im awt edt ausgeführt werden: thread weglassen oder mit SwingUtilities.invokeAndWait() ausführen.
 
R

Roar

Gast
SwingUtilities.invokeAndWait(irgendeinRunnableInDessenRunMethodeDuShowDialogAufrufst);
} catch (...) ...

:)
 
G

gastfrager

Gast
also jetzt hab ichs so:

Code:
import java.awt.Color;
import java.lang.reflect.InvocationTargetException;

import javax.swing.JColorChooser;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

class ColorThread extends Thread {
    
	public void run() {

		try {
			SwingUtilities.invokeAndWait(new Runnable() {
				public void run() {
					Color chatTextColor = JColorChooser.showDialog(new JFrame(), "Farbe des Chattextes", Color.ORANGE);

					System.out.println("color: " + chatTextColor);
					int red = chatTextColor.getRed();
					int green = chatTextColor.getGreen();
					int blue = chatTextColor.getBlue();

					String redHex = Integer.toHexString(0x100 | red).substring(1).toUpperCase();
					String greenHex = Integer.toHexString(0x100 | green).substring(1).toUpperCase();
					String blueHex = Integer.toHexString(0x100 | blue).substring(1).toUpperCase();

					String colorString = "#" + redHex + greenHex + blueHex;
					System.out.println(colorString);
				}
			});
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

das geht...aber dann ist das aufrufende programm ja wieder lahmgelegt, oder wie macht der scheduler das jetzt?

gruß und danke:)
 

Mag1c

Top Contributor
hehe, ich wollt grad sagen :)

wären wir bei Mathe, würde ich jetzt sagen, daß du den Thread gegen das invokeAndWait wegkürzen kannst :shock:

Bei dem Aufwand, den du bis hier schon getrieben hast, hättest du locker den JColorChooser in ein Frame packen können:

Code:
	public class ColorChooserFrame extends JFrame {
		public ColorChooserFrame(String title) {
			super(title);
			chooser = new JColorChooser();
			add(chooser, BorderLayout.CENTER);
			JPanel btnPanel = new JPanel();
			JButton okBtn = new JButton("Ok");
			okBtn.addActionListener(new ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Color color = chooser.getColor();
					// hier jetzt was mit der Farbe machen
					dispose();
				};
			});
			btnPanel.add(okBtn);
			JButton cancelBtn = new JButton("Cancel");
			cancelBtn.addActionListener(new ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					dispose();
				};
			});
			btnPanel.add(cancelBtn);
			add(btnPanel, BorderLayout.SOUTH);
			pack();
		}

		private JColorChooser chooser;
	}

Gruß
Mag1c
 
R

Roar

Gast
hehe so ist der trhead ja ziemlich unnötig ;)
wenn ich richtig lese wolltest du den colorchooser in nen trehad legen weil sonst dein chat hängt? du musst das IO zeugs in einen anderen thread auslagern, nicht das gui zeugs, das muss nämlich im gui thread stattfinden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P thread nimmt veränderte boolean nicht AWT, Swing, JavaFX & SWT 7
N JFrame loescht alles, sobald der Thread zuende ist AWT, Swing, JavaFX & SWT 22
M Server/Client thread von GUI Trennen AWT, Swing, JavaFX & SWT 2
K JavaFx, Sound Aufnahme und Thread AWT, Swing, JavaFX & SWT 0
T Exception in thread "main" java.lang.NoClassDefFoundError AWT, Swing, JavaFX & SWT 4
G Exception javafx Thread -> caused by removing children while in EventHandler AWT, Swing, JavaFX & SWT 28
H Event Handling Thread - Abruf der get-Methode AWT, Swing, JavaFX & SWT 5
J "Exception in thread "AWT-EventQueue-0"" Fehler AWT, Swing, JavaFX & SWT 3
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
C Thread verwalten AWT, Swing, JavaFX & SWT 2
A Swing Exception in thread "AWT-EventQueue-0" AWT, Swing, JavaFX & SWT 1
S JavaFX Exception in thread "JavaFX Application Thread" AWT, Swing, JavaFX & SWT 3
L Label im JavaFX Thread Updaten AWT, Swing, JavaFX & SWT 3
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
ralfb1105 JavaFX MVC: Thread in Model Class mit Ausgabe in TextArea AWT, Swing, JavaFX & SWT 10
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
J Thread per Button starten AWT, Swing, JavaFX & SWT 10
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
T JavaFX Task / Thread / FXThread Komplikationen AWT, Swing, JavaFX & SWT 5
O Swing Event Dispatch Thread AWT, Swing, JavaFX & SWT 1
L JavaFX UI Thread block AWT, Swing, JavaFX & SWT 13
X Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1 AWT, Swing, JavaFX & SWT 6
sandaime Swing Thread für CMD auslesen AWT, Swing, JavaFX & SWT 16
E JavaFX JavaFX Application in Thread ausführen AWT, Swing, JavaFX & SWT 1
D JavaFX UI-Thread und DB-Thread trennen um z.B. Ladebalken anzuzeigen AWT, Swing, JavaFX & SWT 15
T JavaFX Controller im extra Thread AWT, Swing, JavaFX & SWT 0
T Swing 2 Thread.sleep parallel laufen lassen AWT, Swing, JavaFX & SWT 4
L Zweites Fenster mit Thread AWT, Swing, JavaFX & SWT 0
E JavaFX Stage.show() in ursprünglichem Thread starten AWT, Swing, JavaFX & SWT 7
L Swing Frame in Thread wird nicht gezeichnet AWT, Swing, JavaFX & SWT 2
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
T Swing Button bleibt grau [=> UI hat sich aufgehängt, Aufgabe in Thread auslagern] AWT, Swing, JavaFX & SWT 3
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q GUI außerhalb GUI-Thread updaten - GUI friert ein AWT, Swing, JavaFX & SWT 18
C Thread in Klassen starten AWT, Swing, JavaFX & SWT 4
L exception in thread awt-eventqueue-0 java.lang.nullpointerexception AWT, Swing, JavaFX & SWT 2
S Swing Exception in thread "AWT-EventQueue-0" bei Jlabel AWT, Swing, JavaFX & SWT 4
D SWT SWT Elemente aus anderen Klassen aufrufen - Invalid thread access AWT, Swing, JavaFX & SWT 6
K JavaFX Tableview mit fxml ohne Aktualiserung trotz Thread AWT, Swing, JavaFX & SWT 13
K Event Handling 2 Buttons und Thread stop AWT, Swing, JavaFX & SWT 3
C Swing Update von swing-TableModels per Thread. Eins geht, das andere nicht, warum? AWT, Swing, JavaFX & SWT 12
V JLabel bzw. GUI aus externen Thread ansteuern AWT, Swing, JavaFX & SWT 3
J Applet Paralleles Thread Handling AWT, Swing, JavaFX & SWT 3
H Swing JfreeChart aktualisieren - mit daten aus thread AWT, Swing, JavaFX & SWT 3
T Java Swing Main GUI Thread AWT, Swing, JavaFX & SWT 3
C Event Handling Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException AWT, Swing, JavaFX & SWT 43
T Table-Zeilen mit Thread einfärben AWT, Swing, JavaFX & SWT 15
F Swing GUI-Thread für automatisches Update nutzen AWT, Swing, JavaFX & SWT 10
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
V Nullpointerexception (etwas mit thread und jframe) AWT, Swing, JavaFX & SWT 3
P Problem Thread.sleep() und JProgressBar AWT, Swing, JavaFX & SWT 7
S SWT GUI-Thread AWT, Swing, JavaFX & SWT 11
A Thread und sleep(1000); AWT, Swing, JavaFX & SWT 7
B Swing Thread+Animation AWT, Swing, JavaFX & SWT 7
S Timer oder Thread.sleep AWT, Swing, JavaFX & SWT 3
M Exception in thread "Thread-3" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 18
B Über SWT Button Thread beenden AWT, Swing, JavaFX & SWT 2
C SWT Gui Thread hängt sich auf AWT, Swing, JavaFX & SWT 3
lumo SWT Exception in thread "main" org.eclipse.swt.SWTError: No more handles AWT, Swing, JavaFX & SWT 3
Luk10 Swing Problem mit Zeichen-Thread AWT, Swing, JavaFX & SWT 8
G 2D-Grafik Von Thread aus Zeichnen AWT, Swing, JavaFX & SWT 5
U Swing JLabel bewegen mittels Thread AWT, Swing, JavaFX & SWT 3
M JProgressBar für einen Thread AWT, Swing, JavaFX & SWT 14
R JTable und Thread AWT, Swing, JavaFX & SWT 4
K Thread.sleep in GUI AWT, Swing, JavaFX & SWT 4
J Thread funktioniert nicht AWT, Swing, JavaFX & SWT 10
D JPanel mit Thread in JPanel AWT, Swing, JavaFX & SWT 4
F Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: null AWT, Swing, JavaFX & SWT 5
P Teil einer Swing GUI in eigenem Thread AWT, Swing, JavaFX & SWT 4
S Thread.sleep() in einer methode fürs zeichen AWT, Swing, JavaFX & SWT 3
O JTree/TreeModel/DefaultMutableTreeNodes thread safe machen AWT, Swing, JavaFX & SWT 3
P repaint während Thread läuft AWT, Swing, JavaFX & SWT 9
F SWT table refresh per Thread AWT, Swing, JavaFX & SWT 2
V Swing remove(Component) blockiert Thread sehr lange. AWT, Swing, JavaFX & SWT 6
J AWT Artefakte bei AWT-Rendering durch parallelen Thread AWT, Swing, JavaFX & SWT 4
H Thread-Problem mit der Darstellung beim Sperren des Fensters AWT, Swing, JavaFX & SWT 2
T Event Dispatch Thread und noch ein Thread AWT, Swing, JavaFX & SWT 7
Burny91 Swing Thread mit wait() und notify() steuern AWT, Swing, JavaFX & SWT 22
N SWT - über Thread Composite erstellen und Anhängen AWT, Swing, JavaFX & SWT 6
K Vom Gui aus auf einen Thread warten AWT, Swing, JavaFX & SWT 4
X Problem bei JTextArea und Thread.sleep() AWT, Swing, JavaFX & SWT 8
F Merkwürdiges Verhalten zeichnen sperater Thread AWT, Swing, JavaFX & SWT 13
B Swing Swing und Thread.sleep() AWT, Swing, JavaFX & SWT 6
N Exception Behandlung mit setDefaultUncaughtExceptionHandler, insbesondere im EventDispatcher Thread AWT, Swing, JavaFX & SWT 4
Q Neuer Thread zum Öffnen AWT, Swing, JavaFX & SWT 2
P Swing GUI im Thread? AWT, Swing, JavaFX & SWT 5
T GUI JFrame - neuer Thread AWT, Swing, JavaFX & SWT 2
data89 Was mache ich mit "Dispatched Event Thread"/Substance falsch? AWT, Swing, JavaFX & SWT 4
0x7F800000 Allg. Frage zum ev. dispatch thread, wie korrekt auf reaktion der Listener warten? AWT, Swing, JavaFX & SWT 4
S Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 7
T thread.sleep Sprung Problem AWT, Swing, JavaFX & SWT 24
N Server mit Thread und Statusbox AWT, Swing, JavaFX & SWT 3
S Objektverhalten in einen Thread legen AWT, Swing, JavaFX & SWT 4
G JProgressBar actionPerformedMethode und SwingUI thread AWT, Swing, JavaFX & SWT 36
E Komponenten in Event Dispatch Thread erzeugen? AWT, Swing, JavaFX & SWT 4
J Thread in GUI einbauen AWT, Swing, JavaFX & SWT 2
Lony AbstractTableModel Exception in thread "AWT-EventQueue- AWT, Swing, JavaFX & SWT 3
A Ticker als Thread AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben