Portal > Foren > Java > Allgemeine Java-Programmierung > endlosschleife interaktiv beenden
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 12.11.2005, 08:15 Nach oben    #1
salex
Gast
 
Beiträge: n/a
Standard endlosschleife interaktiv beenden

hallo, leute,
der titel drückt's eigentlich schon aus. ich möchte eine endlosschleife durch tastatureigabe beenden können. geht das? und wenn ja dann wie!
danke euch
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.11.2005, 10:19 Nach oben    #2
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.110
Standard

Code:
while(true) {
    if(exitKeyPressed()) break;
}
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.11.2005, 12:20 Nach oben    #3
salex
Gast
 
Beiträge: n/a
Standard

also irgendwie verstehe ich das nicht so ganz. ich hab das folgendermaßen realisiert:
ein file mit
...
while(true){...}
...

und dann ein file mit keylistener. etwa so
...
public void keyPressed(KeyEvent e)
{


if(e.getKeyCode() == KeyEvent.VK_Q)
{
//hier wird eine variable, z.b. ende, auf true gesetzt
}
}
...
dann, wenn ich deinen vorschlag richtig verstanden hab könnte ich folgendes machen:
while(true)
{
if(ende) break;
}
das tut aber nicht. und ich denke, dass es daran liegt, dass es gar nicht zu der abfrage kommt, ob die taste gedrückt wurde und somit ende = true gesetzt wurde.
lieg ich da richtig? oder hab ich einfach deinen vorschlag falsch verstanden?
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.11.2005, 12:34 Nach oben    #4
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.110
Standard

Wofür brauchst du überhaupt die Schleife? Warum machst du "ende" nicht direkt zur Bedingung der Schleife?
Und könntest du eventuell mal etwas mehr Code posten?
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.11.2005, 17:12 Nach oben    #5
salex
Gast
 
Beiträge: n/a
Standard

danke für deine antworten. mehr code also,mal schauen...

hier das erste file, mit der while schleife:

package test11112005;

import java.io.*;
import java.awt.*;
import java.awt.event.*;
/**
*
* @author stalm110
*/
public class Test2 extends Component{

private static Test2 einTest;
private TastenAbhoerer einAbhoerer;
//private double zeitSpanneGD10;
//private double zeitSpanneGD30;
private int i = 0;
private boolean exitKey = false;
/** Creates a new instance of Test */
public Test2() {
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
einTest = new Test2();
// einTest.zeitSpanneGD10 = Double.valueOf(args[0]);
//einTest.zeitSpanneGD30 = Double.valueOf(args[1]);
einTest.start();
}

public void beenden(boolean b)
{
exitKey = b;
}

public void start(){
//zeitSpanneGD10 = 1.1718;
//zeitSpanneGD30 = 1.1742;
String file = "C:/DatenAlex/capture/test11112005a.csv";
FileReader fr = null;
double array10[] = new double[1];
double array30[] = new double[1];
int lock = 0;
double aktGD10;
double aktGD30;

einAbhoerer = new TastenAbhoerer(einTest);
addKeyListener(einAbhoerer);

try
{
BufferedReader in = new BufferedReader( fr = new FileReader(file) );

while(i < 10)
{
if(exitKey)
{
break;
}
String line = in.readLine();
if(line == null)
{
i = i + 1;
try
{
synchronized(einTest)
{
einTest.wait(10000);
}
}
catch(InterruptedException e)
{
System.out.println("Warten fehl geschlagen!");
}
continue;
}
String[] splitArray = line.split(";");
if(splitArray.length >
{
//System.out.println("Hallo");
if(splitArray[0].compareTo("OFFER") == 0 && splitArray[2].compareTo("1") == 0)
{
System.out.println(splitArray[7] + "_" + splitArray[8]);

}
}
}
}
catch ( IOException e ) {
System.err.println( e );
}
finally {
if ( fr != null )
try { fr.close(); } catch ( IOException e ) { }
}
}
}


und hier der keylistener:

package test11112005;
import java.awt.*;
import java.awt.event.*;

public class TastenAbhoerer extends KeyAdapter
{
private Test2 aTest;

public TastenAbhoerer(Test2 pTest)
{
aTest = pTest;
}

public void keyPressed(KeyEvent e)
{
if(e.getKeyCode() == KeyEvent.VK_Q)
{
aTest.beenden(true);
}
}
}

sorry, dass so wenig komentare drin sind
im prinzip macht es folgendes: daten aus einer datei einlesen... wenn String line = in.readLine() "leeres objekt" also == null, dann zehn sekunden warten und einen erneuten versuch unternehmen die daten einzulesen.

irgendwelche ideen?
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.11.2005, 17:17 Nach oben    #6
salex
Gast
 
Beiträge: n/a
Standard

...hab was vergessen
und zwar sieht die while schleife im ersten file so aus while(i<10). es mußnatürlich heißen while(true)
hab das nur eingebaut, damit sie irgendwann mal zu ende ist
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.11.2005, 18:36 Nach oben    #7
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.110
Standard

Wenn readLine "null" liefert, dann deshalb, weil du die ganze Datei bereits eingelesen hast. Bist du sicher, dass das, was du da machst, richtig ist? Ich kann es mir nämlich nur schwer vorstellen.

PS: In Zukunft bitte den BBCode "code" oder "php" für Programmcodes verwenden, dann bleiben die Einrückungen erhalten. Danke.
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.11.2005, 12:20 Nach oben    #8
salex
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von pago
Wenn readLine "null" liefert, dann deshalb, weil du die ganze Datei bereits eingelesen hast. Bist du sicher, dass das, was du da machst, richtig ist?
es kommen ständig daten nach. deswegen warten und erneut probieren.

hab meinen code jetzt auf das wesentliche vereinfacht. es tut zwar immer noch nicht, aber es ist schon viel übersichtlicher...
meiner meinung nach funktioniert es deswegen nicht weil es gar nicht während der ausführung der while schleife dazu kommt den strang mit der keypressed methode abzuarbeiten und somit den zustand von ende zu ändern.

was meint ihr denn dazu? wie könnte es funktionieren?

hier der aktuelle stand:

Code:
import java.awt.*;
import java.awt.event.*;
/**
 *
 * @author test
 */


public class Abbruch extends Component {
    private static Abbruch aAbbruch;
    private boolean ende = false;
    
    
    /** Creates a new instance of Abbruch */
    public Abbruch() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        aAbbruch = new Abbruch();
        aAbbruch.start();        
    }
    public void start()
    { 
        addKeyListener(new KeyAdapter()
        {
            public void keyPressed(KeyEvent e)
            {            
                if(e.getKeyCode() == KeyEvent.VK_Q)
                {
                    System.out.println("Taste gedrückt!");
                    ende = true;
                }
            }
        });
        while(true)
        {
            if(ende)
            {
                break;
            }
        }
        
    }        
}
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.11.2005, 13:25 Nach oben    #9
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.110
Standard

Pack die while-Schleife in einen eigenen Thread, dann müsste es funktionieren.
PHP-Code:
import java.awt.*;
import java.awt.event.*;
/**
 *
 * @author test
 */


public class Abbruch extends Component implements Runnable {
    private static 
Abbruch aAbbruch;
    private 
boolean ende false;
    
    
    
/** Creates a new instance of Abbruch */
    
public Abbruch() {
        
addKeyListener(new KeyAdapter()
        {
            public 
void keyPressed(KeyEvent e)
            {            
                if(
e.getKeyCode() == KeyEvent.VK_Q)
                {
                    
System.out.println("Taste gedrückt!");
                    
ende true;
                }
            }
        });
    }
    
    
/**
     * @param args the command line arguments
     */
    
public static void main(String[] args) {
        
aAbbruch = new Abbruch();
        
aAbbruch.start();        
    }
    
    public 
void start() {
        new 
Thread(this).start();
    }
    
    public 
void run()
    { 
        while(
true)
        {
            if(
ende)
            {
                break;
            }
        }
        
    }        

__________________
Patrick Gotthardts Weblog.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Java Tutorial interaktiv, von gailer-net.de JavaJim Literatur 1 31.08.2006 15:35
endlosschleife (+ftp) N!cKY PHP-Programmierung 5 30.03.2006 16:55
Application aus Application heraus starten / beenden `B Allgemeine Java-Programmierung 2 17.04.2005 16:44


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:59 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44