Warten bis die Länge eines Strings nicht mehr 0 ist

Viewty-Fan

Mitglied
Hallo,
ich habe ein Problem. Ich bekomme als Ausgabe einen von 4 verschiedene Strings. Jetzt brauche ich eine Methode, die solange wartet bis die Länge eines dieser 4 Strings nicht mehr 0 ist. Wie kann man das verwirklichen?

Danke für die Hilfe
Viewty-Fan
 

ARadauer

Top Contributor
Auf jeden Fall brauchst du mal einen extra Thread der schaut ob sich der String schon geändert hat... zb
Java:
public class Test {

   private String myString;

   public Test() {
      myString = "";
   }

   public void doIt() {
      System.out.println("starting doIt");
      while (myString.length() == 0) {
         try {
            Thread.sleep(100);
         } catch (InterruptedException e) {
         }
      }
      System.out.println("did it: " + myString);
   }

   public String getMyString() {
      return myString;
   }

   public void setMyString(String myString) {
      this.myString = myString;
   }

   public static void main(String[] args) throws InterruptedException {
      final Test test = new Test();

      new Thread(new Runnable() {
         public void run() {
            test.doIt();
         }
      }).start();

      System.out.println("jetzt warten mir mal 5 Sekunden");
      Thread.sleep(5000);
      System.out.println("fertig");
      test.setMyString("mein String");
   }

}
 

Eldorado

Bekanntes Mitglied
Hi erstmal erzählst du vielleicht was der Sinn der Sache ist:). Ich hab mal schnell was zusammengeschrieben(Da musst du aber in über einem anderen Thread die Änderungen an den Strings vornehmen lassen)(lässt sich noch schöner mit nem String[] lösen, aber ich glaube sowieso nicht, dass dir das so viel weiter hilft)
Java:
        String stringI = "";
        String stringII = "";
        String stringIII = "";
        String stringIV = "";
        while(true){
            if (stringI.length() != 0 || stringII.length() != 0 || stringII.length() != 0 || stringIV.length() != 0) {
                break;
            } else{
                try {
                    Thread.sleep(10);
                } catch (InterruptedException ex) {
                }
            }
        }
mfg
Eldorado
 

Viewty-Fan

Mitglied
Hi erstmal erzählst du vielleicht was der Sinn der Sache ist:)


Klar :)
Wir haben vor kurzem in der Schule mit Java begonnen. Jetzt sollen wir einen eingegebenen Text nur ausgeben, rückwärts schreiben und darauf prüfen ob es ein Palindrom ist. Falls es keine Palindrom ist es zu einem machen. Ich habe das mit Buttons und ActionListener realisiert. Jetzt geben diese ActionListener verschiedene Strings aus. Diese muss ich jetzt weiter verwenden, weil unser Lehrer will, dass JavaKarol (Programm zu Einstieg in das Programmieren) diese Strings schreibt.

Jetzt habe ich den Code mal so angewendet. Das klappt aber noch nicht richtig... Das liegt daran, dass ich den Code nicht komplett verstehe. Könnt ihr mir erklären wo die Methoden "karol.StartPosition(); und karol.write(String); " hinmüssen. Diese Methoden sollen angewandt werden, wenn ein String geschrieben worden ist.

Java:
        String name = "";
        String Turn = "";
        String Palin2 = "";
        String MakePalindrom = "";
        while(true){
            if (name.length() != 0 || Turn.length() != 0 || Palin2.length() != 0 || MakePalindrom.length() != 0) {
                break;
            } else{
                try {
                    Thread.sleep(10);
                } catch (InterruptedException ex) {
                    karol.StartPosition();
                    karol.write(MakePalindrom);
                }
            }
        }

Falls euch der gesamten Code helfen würde meldet euch, dann lade ich ihn auch noch hoch.

Viewty-Fan
 

Eldorado

Bekanntes Mitglied
Der catch-block wird hier nur dann ausgeführt, wenn etwas beim warten schiefgeht(passiert so gut wie nie). Aber erstmal was grundsätzliches: Du benutzt doch einen Button um die Prüfung zu starten oder? warum musst du dann auf Eingaben warten, wenn dir der ActionListener sagt, wenn der Benutzer die Auswertung haben will? Aber vielleicht postest du wirklich mal deinen Code(ist hoffentlich nicht zu viel ;))
 
T

Tomate_Salat

Gast
Naja, wenn das ding eine GUI hat, sehe ich keine Notwendigkeit für so einen Überwachungsthread, aber ich würde hier 2 Dinge beachten:
a) Den Thread als Daemon, sonst läuft der weiter, auch wenn das Programm beendet ist
b) synchronisierung

Hier mal mein Vorschlag:
Java:
public class Waiter
{
	private String str	= "";
	
	public synchronized void setStr(String string)
	{
		if(string != null)
			str	= string;
	}
	
	public synchronized String getStr()
	{
		return str;
	}
	
	public void checkString()
	{
		Thread th	= new Thread()
		{
			public void run() 
			{							
				while(!isInterrupted())
				{					
					if(getStr().length() > 0)
					{
						System.out.println("JIHAA!");
						interrupt();
					}
					try
					{
						Thread.sleep(10);
					}
					catch(InterruptedException e)
					{						
						break;
					}
				}
			};
		};
		
		th.setDaemon(true);
		th.start();
	}
	
	public static void main(String[] args)
	{
		Waiter waiter	= new Waiter();
		System.out.println("-- Start");
		waiter.checkString();
		try
		{	
			System.out.println("Input: " + waiter.getStr());
			Thread.sleep(5000);
		}
		catch(InterruptedException e)
		{
			
		}
		
		waiter.setStr("abcdeftg");
		System.out.println("-- Ende");
	}
}

MFG

Tomate_Salat
 
Zuletzt bearbeitet von einem Moderator:

Viewty-Fan

Mitglied
Hier ist mein Code...

Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.FlowLayout;
import java.awt.Button;

 
public class Arbeit_Test
{

    WELT meineWelt;
    SCHREIBER karol;
    String MakePalindrom;
        String name;
        TextField Input=new TextField ("Eingabe",20);
        TextField Output= new TextField ("Ausgabe",20);
        Frame Fields= new Frame ("AIT-Projekt");
        Button close = new Button ("Beenden");
        Button Spiegeln = new Button ("Spiegeln");
        Button Turn = new Button ("Drehen");
        Button Palindrom = new Button ("Palindrom");

    /**
     * Konstruktor der Klasse ARBEIT
     * 
     * Erzeugt die f¸r die Methode Ausfuehren() erforderlichen 
     * Objekte der Klassen WELT und ROBOTER
     */
    public Arbeit_Test()
    {
        meineWelt = new WELT(50,10,10);
        karol = new SCHREIBER(meineWelt); 
        
           
    }
    

public void schreiben(){
close.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.exit(0);
            }
        });
            Spiegeln.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    name=Input.getText();
                    Output.setText(name);
            }
        });
            Turn.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    String Turn = Input.getText();
                    Turn = new StringBuffer(Turn).reverse().toString();
                    Output.setText(Turn);
            }
        });
            Palindrom.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    String Palin = Input.getText();
                    String Palinreverse= Input.getText();
                    String Palin2 = Palin.replaceAll(" ", "");
                    Palinreverse =new StringBuffer(Palin2).reverse().toString();
                    if (Palinreverse.equals(Palin2)){
                    Output.setText(Palin2);
                    }
                    else {
                    MakePalindrom= Palin2 + Palinreverse;
                    Output.setText(MakePalindrom);
                    }
            }
        });
        
            Fields.add(Input);
            Fields.add(Output);
            Fields.setSize(200,300);
            Fields.setVisible(true);
            Fields.add(close);
            Fields.add(Spiegeln);
            Fields.add(Turn);
            Fields.add(Palindrom);
            Input.setBounds(0,25,195,55);
            Output.setBounds(0, 85, 195, 55);
            Output.setEditable(false);
            Output.setBackground(Color.RED);
            close.setBounds(0, 150, 100, 50);
            Spiegeln.setBounds(0, 200, 100, 50);
            Palindrom.setBounds(100, 200, 100, 50);
            Turn.setBounds(100, 150, 100,50);
            
            
        String name = "";
        String Turn = "";
        String Palin2 = "";
        String MakePalindrom = "";
        while(true){
            if (name.length() != 0 || Turn.length() != 0 || Palin2.length() != 0 || MakePalindrom.length() != 0) {
                break;
            } else{
                try {
                    Thread.sleep(10);
                } catch (InterruptedException ex) {
                }
                karol.StartPosition();
                karol.write(MakePalindrom);
            }
        }
          
karol.StartPosition();
karol.write(MakePalindrom);
}


Vielleicht hilft das euch weiter...

@Tomate_Salat Dein Code ist mir etwas zu kompliziert... Wenn da mein Lehrer fragt, was ich da geschrieben habe habe ich ein Problem;)
 
T

Tomate_Salat

Gast
(Multi)Threading ist kompliziert und sollte mit viel bedacht geregelt werden. Wenn dein Lehrer fragt: Warum hast du da ein Thread.sleep(10) drin, wäre ich mir nicht sicher, ob du darauf die antwort weist ;-) (ganz einfach: ohne das würde mind. ein Prozessorkern eine Auslastung von 100% haben).

Du machst es dir aber viel zu kompliziert. Arbeite mit Listeneren: drückt man auf den Button, dann führst du eine Prüfung durch und fertig, dafür brauchste absolut kein Multithreading.

Edit
Btw ich überfliege gerade deinen Code. Gewöhne dir gleich die richtigen Konventionen an:
Deine Klasse [c]Arbeit_Test[/c] schreibt man laut Konvention [c]ArbeitTest[/c]
[c]TextField Input[/c] variablen und referenzen kleinschreiben.
 
Zuletzt bearbeitet von einem Moderator:

Eldorado

Bekanntes Mitglied
Dann hast du aber meinen Beitrag nicht aufmerksam gelesen:
Du benutzt doch einen Button um die Prüfung zu starten oder?warum musst du dann auf Eingaben warten, wenn dir der ActionListener sagt, wenn der Benutzer die Auswertung haben will?
Aber vielleicht war es auch ein bisschen umständlich formuliert :D
mfg
Eldorado
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H JavaFX Hintergrundfarbe ändern, warten, Hintergrundfarbe wieder ändern Java Basics - Anfänger-Themen 34
D Programm auf Enter warten lassen Java Basics - Anfänger-Themen 2
E Richtiges Warten Java Basics - Anfänger-Themen 8
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
G Wie kann ich 1s lang warten? Java Basics - Anfänger-Themen 1
D JFrame - 10 Sekunden bis zum schließen warten. Java Basics - Anfänger-Themen 2
R Threads aufeinander warten lassen? Java Basics - Anfänger-Themen 10
S Input/Output In Java Swing auf Button warten? Java Basics - Anfänger-Themen 9
A Thread auf anderen warten Java Basics - Anfänger-Themen 2
C Warten auf Antwort Java Basics - Anfänger-Themen 22
S Threads Programm terminiert statt zu warten Java Basics - Anfänger-Themen 20
E ExecutorService warten bis alles fertig? Java Basics - Anfänger-Themen 5
A Threads Eine Klasse muss auf Variable der Anderen warten. Java Basics - Anfänger-Themen 6
D Input/Output Auf Tasteneingabe warten Java Basics - Anfänger-Themen 4
A Activity1 soll auf Activity2 warten (Camera-Intent) Java Basics - Anfänger-Themen 5
D Threads Kartenspiel - auf legen warten Java Basics - Anfänger-Themen 15
B Methode warten lassen bis Button gedrückt wird Java Basics - Anfänger-Themen 16
JAVAnnik auf Threadende warten Java Basics - Anfänger-Themen 6
H Auf Threads warten Java Basics - Anfänger-Themen 3
S Warten bis alle Threads fertig sind Java Basics - Anfänger-Themen 12
I Auf DB-Operation warten Java Basics - Anfänger-Themen 2
R Thread soll auf andere Threads warten Java Basics - Anfänger-Themen 3
T Warteschlange warten lassen bis Ereignis Java Basics - Anfänger-Themen 27
A Main warten lassen bis Variable durch Button übergeben wird Java Basics - Anfänger-Themen 2
M prozess starten und warten bis dieser sich beendet Java Basics - Anfänger-Themen 3
G Eigene Klasse für externe Befehle - Warten auf Prozesse Java Basics - Anfänger-Themen 6
D Auf Event warten Java Basics - Anfänger-Themen 4
F Logikproblem: Auf Mouselistener warten Java Basics - Anfänger-Themen 6
E Auf Mouselistener warten?! Java Basics - Anfänger-Themen 20
M Warten bis Thread an einem Semaphore angekommen ist Java Basics - Anfänger-Themen 4
C countdown/timer/Zeit warten lassen Java Basics - Anfänger-Themen 14
S Auf andere Methode warten Java Basics - Anfänger-Themen 7
B Während Schleife nicht auf Eingabe warten Java Basics - Anfänger-Themen 2
T auf vbscript warten Java Basics - Anfänger-Themen 3
S Thread warten abbrechen? Java Basics - Anfänger-Themen 5
C auf beendigung eines threads warten Java Basics - Anfänger-Themen 6
P Warten auf KeyTyped Java Basics - Anfänger-Themen 7
M warten in einer while-schleife Java Basics - Anfänger-Themen 12
L programm zum warten zwingen Java Basics - Anfänger-Themen 4
B Auf Programm warten Java Basics - Anfänger-Themen 2
S Auf Object warten Java Basics - Anfänger-Themen 2
K Auf File- Befehl warten. Java Basics - Anfänger-Themen 10
T eine Sekunde warten Java Basics - Anfänger-Themen 11
C Konsolenanwendung auf belibige Taste warten Java Basics - Anfänger-Themen 2
D Auf anderes Fenster Warten Java Basics - Anfänger-Themen 6
A Warten auf Userinput Java Basics - Anfänger-Themen 2
G Bei JDialog warten Java Basics - Anfänger-Themen 5
T Auf Selection warten Java Basics - Anfänger-Themen 7
N Java Insel 6 lesen oder auf 7 warten ? Java Basics - Anfänger-Themen 11
S Programmablauf pausieren, bzw. auf Eingabe warten Java Basics - Anfänger-Themen 4
G Warten auf Eingabe Java Basics - Anfänger-Themen 12
G Thread soll warten Java Basics - Anfänger-Themen 5
F 1 Minute warten Java Basics - Anfänger-Themen 18
S Thread auf Thread warten lassen. Java Basics - Anfänger-Themen 2
G auf ende mehrerer threads warten Java Basics - Anfänger-Themen 2
B Timer / Thread warten Java Basics - Anfänger-Themen 3
G warten Java Basics - Anfänger-Themen 10
P Warten-Fenster Java Basics - Anfänger-Themen 8
vogella *Gelöst *Im Programm warten (wait()) Java Basics - Anfänger-Themen 2
A Bitte Warten Java Basics - Anfänger-Themen 2
P Externen Proceß starten und warten bis beendet? Java Basics - Anfänger-Themen 2
J Threads: warten bis erste aktion ausgeführt wurde Java Basics - Anfänger-Themen 6
G Eine Methode zum Warten? Java Basics - Anfänger-Themen 7
G Frage zum Warten auf und Aufwecken von Threads Java Basics - Anfänger-Themen 2
L Einfaches Warten in eine Schleife Java Basics - Anfänger-Themen 9
B auf mehrere Threads warten Java Basics - Anfänger-Themen 3
K Animation warten lassen Java Basics - Anfänger-Themen 9
S Auf JInternalFrame warten? Java Basics - Anfänger-Themen 2
R Warten, bis ein Prozess gestartet wurde Java Basics - Anfänger-Themen 23
M x Sekunden warten Java Basics - Anfänger-Themen 13
P Bitte um ein paar Tipps! (Threads, Warten auf Ereignisse,.) Java Basics - Anfänger-Themen 2
M Wie lässt man eine Methode warten ohne Threads zu benutzen? Java Basics - Anfänger-Themen 8
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
S Die durchschnittliche Länge der Strings Java Basics - Anfänger-Themen 11
Hzrfa Länge der längsten Kette java Java Basics - Anfänger-Themen 56
BeginnerJava String mit vorgegebener Länge und Buchstaben erzeugen/ mit Leerstellen Java Basics - Anfänger-Themen 8
JavaBeginner22 Wort mit der größten Länge ausgeben Java Basics - Anfänger-Themen 4
I Array Länge in Klasse festlegen Java Basics - Anfänger-Themen 1
Csircc Neuer Array mit geringerer Länge und selben werten. Java Basics - Anfänger-Themen 2
P Länge des längsten möglichst klein Java Basics - Anfänger-Themen 2
districon 2D Array - Länge zuweisen Java Basics - Anfänger-Themen 1
t2im Java Array-Länge ändern? Java Basics - Anfänger-Themen 22
W Best Practice Tabulatoren verschiedener Länge ersetzen Java Basics - Anfänger-Themen 8
H Klassen Die Länge einer Text-Node bestimmen Java Basics - Anfänger-Themen 2
J Objekt-Array dynamischer Länge aus Benutzereingaben erstellen Java Basics - Anfänger-Themen 6
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
M Strings mit gerader und ungerader Länge ausgeben Java Basics - Anfänger-Themen 10
N Länge eines Arrays in einem Objekt testen Java Basics - Anfänger-Themen 51
L Zwei sortierte Subarrays mit gleicher Länge zusammenfügen Java Basics - Anfänger-Themen 2
A Arrays kombinieren (länge eines Arrays kann 0 sein) Java Basics - Anfänger-Themen 6
S Java Array Länge aus anderer Klasse lesen Java Basics - Anfänger-Themen 1
O Länge eines Arrays Java Basics - Anfänger-Themen 6
M Die länge von char Java Basics - Anfänger-Themen 6
A Best Practice Undefinierte länge bei arrays Java Basics - Anfänger-Themen 4
E Array-list mit einer bestimmten Länge Java Basics - Anfänger-Themen 17
F Maximale Länge eines Strings Java Basics - Anfänger-Themen 5
L Länge der dritten Dimension eines dreidimensionalen Arraya Java Basics - Anfänger-Themen 1
T Länge einer Textdatei Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben