Problem mit Oberfläche und Thread

Status
Nicht offen für weitere Antworten.

Thunderhit

Mitglied
Nachdem ich jetzt erfahren habe (in einem anderen Thread, aus dem Anfängerforum, aber habe gemerkt dass das Problem bei meiner Oberfläche liegt) dass ein weiterer Thread für meine Anwendung nötig ist, habe ich mit den gegebenen Hilfen und bisschen suchen versucht eine Lösung zu finden, klappt leider nicht so richtig :-/

Hier der Code

Code:
package visual;

import java.io.IOException;
import javax.speech.recognition.GrammarException;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.custom.CCombo;
import java.lang.Runtime;
import edu.cmu.sphinx.util.props.PropertyException;
import features.Start_VR;

public class Fend extends Thread{

	private Shell sShell = null;
	private static Display display = Display.getDefault();
	private Composite all = null;
	private Composite top = null;
	private Label Datei = null;
	private Label Bearbeiten = null;
	private Label Ansicht = null;
	private Composite buttons = null;
	private Composite components = null;
	private Tree ctree = null;
	private Button START = null;
	public Text text = null;
	private Button Command = null;
	private Composite elements = null;
	private Label label = null;
	private Text text1 = null;
	private Label label1 = null;
	private Button checkBox = null;
	private Label label2 = null;

	private void createAll() {
		GridLayout gridLayout3 = new GridLayout();
		gridLayout3.numColumns = 1;
		gridLayout3.makeColumnsEqualWidth = false;
		all = new Composite(sShell, SWT.NONE);
		createTop();
		createButtons();
		all.setLayout(gridLayout3);
		createComponents();
	}

	private void createTop() {
		GridData gridData3 = new GridData();
		gridData3.horizontalAlignment = GridData.BEGINNING;
		gridData3.verticalAlignment = GridData.CENTER;
		GridLayout gridLayout = new GridLayout();
		gridLayout.numColumns = 3;
		gridLayout.makeColumnsEqualWidth = false;
		top = new Composite(all, SWT.NONE);
		top.setLayout(gridLayout);
		top.setLayoutData(gridData3);
		Datei = new Label(top, SWT.NONE);
		Datei.setText("Datei");
		Bearbeiten = new Label(top, SWT.NONE);
		Bearbeiten.setText("Bearbeiten");
		Ansicht = new Label(top, SWT.NONE);
		Ansicht.setText("Ansicht");

	}

	public void createButtons() {
		
			GridLayout gridLayout2 = new GridLayout();
			gridLayout2.numColumns = 2;
			buttons = new Composite(all, SWT.NONE);
			buttons.setLayout(gridLayout2);
			START = new Button(buttons, SWT.NONE);
			START.setText("start");
			Command = new Button(buttons, SWT.NONE);
			Command.setText("Command");
	}

	private void createComponents() {
		GridData gridData21 = new GridData();
		gridData21.horizontalSpan = 2;
		gridData21.verticalAlignment = GridData.FILL;
		gridData21.horizontalAlignment = GridData.FILL;
		GridData gridData11 = new GridData();
		gridData11.grabExcessHorizontalSpace = false;
		gridData11.horizontalAlignment = GridData.FILL;
		gridData11.verticalAlignment = GridData.CENTER;
		gridData11.verticalSpan = 2;
		gridData11.grabExcessVerticalSpace = false;
		GridData gridData = new GridData();
		gridData.verticalAlignment = GridData.CENTER;
		gridData.grabExcessHorizontalSpace = false;
		gridData.grabExcessVerticalSpace = false;
		gridData.horizontalAlignment = GridData.FILL;
		GridLayout gridLayout1 = new GridLayout();
		gridLayout1.numColumns = 3;
		gridLayout1.verticalSpacing = 5;
		gridLayout1.makeColumnsEqualWidth = true;
		components = new Composite(all, SWT.NONE);
		components.setLayout(gridLayout1);
		components.setLayoutData(gridData11);
		ctree = new Tree(components, SWT.NONE);
		ctree.setLayoutData(gridData);
		text = new Text(components, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY);
		text.setEditable(false);
		text.setLayoutData(gridData21);
		text.setEnabled(true);
		

	}

	private void createElements() {
		GridLayout gridLayout4 = new GridLayout();
		gridLayout4.numColumns = 2;
		elements = new Composite(sShell, SWT.NONE);
		elements.setLayout(gridLayout4);
		label = new Label(elements, SWT.NONE);
		label.setText("Commandname:");
		text1 = new Text(elements, SWT.BORDER);
		label1 = new Label(elements, SWT.NONE);
		label1.setText("Confirmation:");
		checkBox = new Button(elements, SWT.CHECK);
		label2 = new Label(elements, SWT.NONE);
		label2.setText("Effect:");
	}

	private void createSShell() {
		GridLayout gridLayout5 = new GridLayout();
		gridLayout5.numColumns = 2;
		sShell = new Shell();
		sShell.setText("Main");
		createAll();
		sShell.setLayout(gridLayout5);
		createElements();
		sShell.setSize(new Point(482, 260));
	}

	public void run()
	{
		try {
			Start_VR vr = new Start_VR();
			vr.start(text);
		}catch (IOException ioe) {
	            System.out.println("I/O Error " + ioe);
	            } catch (PropertyException f) {
	            System.out.println("Problem configuring recognizer" + f);
	            } catch (InstantiationException  f) {
	            System.out.println("Problem creating components " + f);
	            } catch (GrammarException ge) {
                        System.out.println(ge);
                        }
	}

	public static void main(String[] args) {
		Fend thisClass = new Fend();
		thisClass.createSShell();
		thisClass.sShell.open();
		Thread t=new Thread();
		t.start();

		while (!thisClass.sShell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}
}

Leider führt er den Code in run() nicht aus, warum?
Am besten erklär ich etwas, also:

vr.start(text); < soll die ganze zeit während das Programm läuft auch arbeiten, wenn ein Ergebnis gefunden wurde, wird es in das textfeld geschrieben. Intern ist es in einer Schleife, bis ein bestimmtes Ereignis eintritt, also muss das nicht in einer Schleife in diesem Code realisiert werden. Es soll quasi die ganze Zeit parallel zum Programm laufen, wenn möglich später bei Bedarf auch manuell gestoppt werden.

Hoffe ihr könnt mir helfen :)
 
B

Beni

Gast
Code:
Thread t=new Thread();
      t.start();

Du startest einen Thread, der nichts zu tun hat...

Ruf doch das "start" deines Fend-Objektes auf, schliesslich ist Fend selbst ein Thread :wink:
 

Thunderhit

Mitglied
Dann gibt er ein
Exception in thread "Thread-0" org.eclipse.swt.SWTException: Invalid thread access
aus. Das Problem scheint in
vr.start(text); zu sein, da ein Thread nicht auf die Objekte eines anderen ohne weiteres zugreifen kann, was bei meinem ja der Fall ist (der 2. Thread soll ich text des 1. etwas schreiben). Habe Möglichkeiten für eine Lösung per display.asyncexec(Runnable...
gefunden, aber da text ja nicht in der static main genutzt werden kann, hab ich in der main zuerst
thisClass.start();
und dann run folgendermaßen implementiert:
Code:
public void run()
	{
		display.asyncExec(new Runnable(){
			public void run()
			{
				try {
					Start_VR vr = new Start_VR();
					vr.start(text);
				}catch (IOException ioe) {
			            System.out.println("I/O Error " + ioe);
			    } catch (PropertyException f) {
			        System.out.println("Problem configuring recognizer" + f);
			    } catch (InstantiationException  f) {
			        System.out.println("Problem creating components " + f);
			    } catch (GrammarException ge) {
		            System.out.println(ge);
		        }
			}
		});
	}
Leider funktioniert es nicht wirklich. Ich starte, der Thread wird gestartet. Ich bekomme Ausgaben im text Fenster, aber wenn ich irgendwohin auf der Oberfläche klicke, hängt wieder alles.. der Rest der GUI ist wieder "festgefroren", aber auch wenn ich nicht klicke, es passiert nichts wenn ich z.B. die Maus über das Textfeld bewege, der Cursor müsste sich ändern, tut er nur nicht.

Wenn nun ein Ergebnis da ist, wird es nicht mehr in text geschrieben..also hängt wieder alles...von async auf sync zu gehen hat auch nicht geholfen...sehr kompliziert oder hab ich was elementares übersehen?
 

Thunderhit

Mitglied
Niemand eine Idee, warum das nicht wie geplant parallel zur GUI läuft, sondern diese blockiert? find den Fehler einfach nicht und wenn das nicht gelöst ist kann ich nicht weiter dran arbeiten :-/
 

Thunderhit

Mitglied
Hatte den Thread zwar schonmal gelesen, aber zu dem Zeitpunkt nicht so verstanden *g*
Jedenfalls, was funktionert: Der neue Thread arbeitet ohne Probleme im Hintergrund und gibt, wenn ich nirgends in die GUI klicke zur Laufzeit, auch Ausgaben aufs Textfeld. Nur leider ist die GUI immer noch unbenutzbar zu der Zeit :-(
Denke eigentlich, dass ich es so gemacht habe wie in dem Thread von dir beschrieben wurde:

Code:
public void createVR()
	{
		Thread t;
		t = new Thread() 
        { 
			public void run() 
            {
				try {
					vr = new Start_VR();
				}catch (IOException ioe) {
			            System.out.println("I/O Error " + ioe);
			    } catch (PropertyException f) {
			        System.out.println("Problem configuring recognizer" + f);
			    } catch (InstantiationException  f) {
			        System.out.println("Problem creating components " + f);
			    }
                display.asyncExec( new Runnable(){ 
                    public void run(){ 
                    	try{
                    		vr.start(text);
                    	}catch (IOException ioe) {
        			        System.out.println("I/O Error " + ioe);
        			    } catch (GrammarException ge) {
        		            System.out.println(ge);
        		        }
                    } 
                }); 
            } 
        };

        text.setText("Hier ist alles blockiert :( "); 
        t.start();
	}

Rufe createVR in der main auf mit thisClass.createVR();
 

Herve

Mitglied
Hallo ich habe so ein ähnliches problem, und zwar will ich während dem warten eine Progessbar (pgbar = new p...(, SWT.INTERMEDIATE) anzeigen...leider taucht diese Progessbar nie auf.

Ich habe jetzt zb ein Label dieses wird vor dem warten auf "connecting" gesetzt und nach dem warten auf "connected" diese wird auch so auf der gui angezeigt... nur meine Progressbar wird nie "visible" gemacht

hier mal der code:
Code:
 bConnect.addSelectionListener(new SelectionAdapter()
            {
                public void widgetSelected(SelectionEvent e) 
                {   
                    pgbar.setVisible(true);
                    lStatus.setText("Connecting...");
                    
                    try
                    {
                        Thread.sleep(3000);
                    } catch (InterruptedException e1)
                    {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                  
                   Display.getDefault().asyncExec(new Runnable(){

                       public void run()
                       {
                           pgbar.setVisible(false);
                           lStatus.setText("connected");
                       }
                          
                      });
                }
            });

irgendwie irgendwo hab ich etwas nicht richtig verstanden das ist mir shcon bewusst und ich hoffe Ihr könnt mir helfen..
meinem Verständnis her müsste ein syncExec() als erstes ausgefürht werden was die statusbar auf visible setzt das geht aber leider auch nicht...

Noch was zum Ergebnis: lässt man die Zeile pgBar.setVisible(false) weg .. so wird die Progressbar angezeigt nach dem der Thread.sleep abgelaufen ist.
 

Wildcard

Top Contributor
Das ganze ist ziemlich daneben.
Das asyncExec aus dem SWT Thread heraus zu starten bringt gar nichts.
Weiterhin darfst du den SWT Thread (genau wie bei Swing den EDT) nicht schlafen legen, weil dann gar nichts mehr funktioniert.
 

Herve

Mitglied
ok..denk auch..hab mich da bischen verfahren in den letzten tagen...aber mein ursprüngliches problem war dies:

nach dem ich ein button drücke soll eine etwas zeitaufwendige methode gestartet werden während dessen soll eine progessbar im Intermediate-sytle angezeigt werden...

wie kann ich das denn in SWT realisieren ?
 

Herve

Mitglied
hmm du redest jetzt von einem ProgressMonitor aktualisieren.... ich habe von einer Progressbar im INDETERMINATE Style geredet die nicht aktualisiert werden soll sondern nur angezeigt werden soll.

Also geh ich davon aus dass du IProgressMonitor aus dem Package org.eclipse.core.runtime meinst...hab mir dann auch mal JFace reingezogen war ja eh fällig und bin auf das Thema auf ProgessMonitorDialog gestossen... was ja schon genau das ist was ich will aber halt nicht in einem Dialog sondern dass soll in meiner ApplicationWindow passieren.

Und bei dem Stand bin ich zu deiner Antwort zurück gekehrt, und wollte dich bitten vielliecht etwas genauer zu erläutern was du meinst. Oder wolltest du Progressbar anstatt ProgressMonitor schreiben ?

ich danke dir vielmals für deine Hilfe...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
cedi Swing Problem mit Grafischer Oberfläche AWT, Swing, JavaFX & SWT 8
Juelin Problem mit TextField.requestFocus(); AWT, Swing, JavaFX & SWT 17
Juelin Problem beim Laden Controller AWT, Swing, JavaFX & SWT 2
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
olfibits JavaFX Problem mit HTMLEditor AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
N Swing Problem mit loop AWT, Swing, JavaFX & SWT 2
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Swing Splitpane Problem AWT, Swing, JavaFX & SWT 1
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
N JavaFX Stranges Problem mit der Autoscroll-Eigenschaft von Textareas AWT, Swing, JavaFX & SWT 0
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
J JavaFX Intersect Problem mit Shapes AWT, Swing, JavaFX & SWT 10
R JavaFX MediaPlayer AVI-Problem AWT, Swing, JavaFX & SWT 1
M Swing Problem mit ListCellRenderer AWT, Swing, JavaFX & SWT 7
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
F GUI Auflösung ändern - Koordianten und Proportions Problem AWT, Swing, JavaFX & SWT 21
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Problem mit Variablen AWT, Swing, JavaFX & SWT 4
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
M Swing AttributiveCellTableModel addRow() Problem AWT, Swing, JavaFX & SWT 1
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
B Swing Problem mit Bildpfad AWT, Swing, JavaFX & SWT 4
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
M Swing pack() Problem mit Taskleiste AWT, Swing, JavaFX & SWT 4
N Swing Choice- Problem! AWT, Swing, JavaFX & SWT 8
Q "AWT-EventQueue-0" Exception Problem AWT, Swing, JavaFX & SWT 4
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
P AWT Problem mit Platzierung (GridBagLayout) AWT, Swing, JavaFX & SWT 2
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
A Mini-Menu-Schriften. Ein Problem bei hohen DPI Zahlen AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
G Swing Setvisible problem AWT, Swing, JavaFX & SWT 1
J JTabbedPane: close Button Problem AWT, Swing, JavaFX & SWT 2
Tom299 JavaFX -> fxmlLoader -> getResourceAsStream Problem AWT, Swing, JavaFX & SWT 1
T Problem: ComboBox und addItem AWT, Swing, JavaFX & SWT 5
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
T LayoutManager LookAndFeel-Problem AWT, Swing, JavaFX & SWT 4
F Problem mit Implementierung von Kollisionsabfrage AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
B JavaFX Problem bei Kamera / Group, gesamte Scene bewegt sich mit AWT, Swing, JavaFX & SWT 0
L Swing Vier Gewinnt Problem AWT, Swing, JavaFX & SWT 2
Z GUI-Problem, finde meinen Fehler nicht! AWT, Swing, JavaFX & SWT 11
B JavaFX KeyEvent und Canvas draw Problem AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen


Oben