2012-03-23 9 views
1

Ich brauche diesen Thread zu langsam Schleife und Pause für die Dauer von IntegerTime, sobald der Benutzer buttonStart drückt. Ich bin ein Amateur, wenn es um Android geht, und ich habe buchstäblich 12 Stunden damit verbracht, zu versuchen, dies zur Arbeit zu bringen. Ich wäre sehr dankbar, wenn jemand helfen oder meinen Code korrigieren könnte. Prost.Warum wird dieser Thread nicht angehalten und wiederholt?

final Button button = (Button) findViewById(R.id.buttonStart);    // Making the button to launch the 
    button.setOnClickListener(new View.OnClickListener() {      // actions below 
     public void onClick(View v) { 

      editTextTarget = (EditText)findViewById(R.id.editTextTarget);  // After user presses 'Start', it will 
      stringTarget = editTextTarget.getText().toString();    // convert the input 'Target' into a string 

      editTextPayload = (EditText)findViewById(R.id.editTextPayload); // After user presses 'Start', it will 
      stringPayload = editTextPayload.getText().toString();    // convert the input 'Payload' into a string and 
      integerPayload = Integer.parseInt(stringPayload);    // then convert the string into an integer 

      editTextTime =(EditText)findViewById(R.id.editTextTime);  // After user presses 'Start', it will 
      stringTime = editTextTime.getText().toString();    // convert the input 'Time' into a string and 
      integerTime = Integer.parseInt(stringTime);     // then convert the string into an integer 

      Thread threadBegin = new Thread() 
      { 
      public void run(){ 
       while (DOSrunning.get()) { 
       try { 
        Thread.sleep(integerTime);    
       } catch (ClientProtocolException e) { 
       } catch (IOException e) { 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       } 
        } 
      ;}; 

      threadBegin.start(); 
+0

Ist die ganze Zeit in Millisekunden? –

+0

Ihre Anforderung ist unklar ... – waqaslam

Antwort

1

Sie Code sieht gut für mich. Sie erstellen eine anonyme Klasse, die Thread erweitert und die Methode run() überschreibt. Sie müssen natürlich eine @Override vor run() haben und ich bin verwirrt, warum Sie die folgenden Fänge benötigen, es sei denn, Sie schneiden einige der inneren Schleife aus.

} catch (ClientProtocolException e) { 
} catch (IOException e) { 

ich nicht auch sehen, wie DOSrunning() gesetzt wird. Es sieht wie ein AtomicBoolean aus, was gut ist. Sind Sie sicher, dass es auf true initialisiert ist?

AtomicBoolean DOSrunning = new AtomicBoolean(true); 

Wenn es nicht so ist, dann muss das Problem sein, dass der Wert in intergerTime nicht Millisekunden. Ein Wert von 1000 wird dort 1 Sekunde schlafen.

Schließlich, stellen Sie sicher, immer die InterruptedException richtig zu behandeln. So etwas ist ein besseres Muster:

} catch (InterruptedException e) { 
    // reset the interrupted flag 
    Thread.currentThread().interrupt(); 
    e.printStackTrace(); 
    // quit the thread if necessary 
    return; 
} 
Verwandte Themen