App Programmierung: Thread starten und Variablenwerte oder Objekte mitgeben

M

Meri

Mitglied
Ich bin am Programmieren einer Spiele App, in welcher sich ein Balken über Touch bewegen lasst (am unteren Rand) und ein Ball quer durch das Bild laufen soll. Mit dem Brett soll der Ball dann immer wieder aufgefangen werden. Die einzelnen Funktionen habe ich schon aber ich bekomme es nicht in ein gemeinsammes Fenster rein.
Einen der vielen Ansatz war ein Thread von der anderen klasse zu öffnen, aber das Funktioniert auch noch nicht ganz, denn ich muss da eigentlich eine Information mitgeben, bzgl. wo etwas ausgegeben werden soll oder so, aber das FUnktioniert nicht und auch wenn ich die Variable im Hauptfenster Deklarieren kann es diese im Thread nicht verwenden.
Folgenden Code habe ich schon probiert:
(Hier wierden über die Startklasse zwei butten angezeigt, über einen soll der thread dann gestartet werden. Er wurde zwar schon oben erstellt aber noch auf pause gesetzt. Wenn er dann startet solte er bis 100 Zählen im selben fesnter, aber wie gesagt bis jetzt tut er das noch nicht da die werte für das fenster in der er ausgeben soll nicht mit übergeben werden können. Der andere butten ist für reset und pause) Dieses Beispiel stammt ursprünglich von folgender Seite(obwohl ich es eigentlich relativ eins zu eins übernomen habe funktioniert es nicht): Android

Counter.java
Java:
package com.example.threadtest;

import android.os.Handler;
import android.widget.TextView;

public class Counter implements Runnable {        //private

    private int result = 0;
    private boolean pause = false;

    @Override
    public void run() {
        
        pause = false;
        result = 0;
        while (true) {
            if (pause) {

                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                    }

                continue;
            }
            result++;
            result = result % 100;
            //Diesen erkennt er nicht, bzw. kann er nicht von der Anderen klasse verwenden, aber ich kann ihn hier auch nicht nochmal deklarieren, das geht auch nciht
            handler.post(new Runnable() {
            @Override
            public void run() {        
                //Und hier ist es das selbe
                tvStatusNeu.setText("" + result);
                }
            });
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
            }
        }
    }

    public void setPause(boolean pause) {
        this.pause = pause;
    }

    public boolean isPause() {
        return pause;
    }

    public void reset() {
        this.result = 0;
        handler.post(new Runnable() {
            @Override
            public void run() {
                tvStatusNeu.setText("" + result);
            }
        });
    }
}
MainActivity.java
Java:
package com.example.threadtest;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
    private static final String TAG = MainActivity.class.getSimpleName();        //MyThreadExample1Activity

    private Button bStart;
    private Button bReset;
    public TextView tvStatus;

    private Handler handler;

    private Counter worker;
    private Thread workthread;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activty_main);
    
        handler = new Handler();
        bStart = (Button) findViewById(R.id.main_b_start);
        bReset = (Button) findViewById(R.id.main_b_reset);
        tvStatus = (TextView) findViewById(R.id.main_tv_status);

        worker = new Counter();
        workthread = new Thread(worker);
        worker.setPause(true);
        

        bStart.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Thread.State status = workthread.getState();
                Log.d(TAG, "status: " + status);
                if (Thread.State.NEW.equals(status)) {
                    // first start
                    Log.d(TAG, "start");
                    workthread.start();    
                    setButtonMsg("pause");
                    bReset.setEnabled(true);
                } else {
                    if (worker.isPause()) {
                        Log.d(TAG, "weiter");
                        worker.setPause(false);
                        bReset.setEnabled(false);
                        setButtonMsg(getString(R.string.pause));
                    } else {
                        Log.d(TAG, "pause");
                        worker.setPause(true);
                        bReset.setEnabled(true);
                        setButtonMsg(getString(R.string.weiter));
                    }
                }
            }
        });

        bReset.setEnabled(false);
        bReset.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if(worker.isPause()){
                    worker.reset();
                    Log.d(TAG, getString(R.string.pause));
                    setButtonMsg(getString(R.string.start));
                }
            }
        });
        
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        workthread.interrupt();
        workthread = null;
    }

    private void setButtonMsg(final String msg) {
        handler.post(new Runnable() {
            @Override
            public void run() {
                if (msg == null) {
                    bStart.setText("");
                } else {
                    bStart.setText(msg);
                }
            }
        });
    }
}

Hat jemand eine Lösung oder hilfe zu diesem Code und kann mir da weiter helfen oder sogar zu meinem Grundproblem eine Idee wie ich es machen kann?
 
Zuletzt bearbeitet:
M

Meri

Mitglied
Danke für das, dieses Funktioniert jetzt soweit, aber in meinem nächsten Schritt geht es leider nicht mehr, wenn ich dann die zweite Klasse (Counter.java) von der View erben lassen will um dann eben meinen Ball mit Paint und onDraw zu zeichnen, denn da wird dann ein Konstruktor mit Context erwartet und wenn ich mehr dazu schreibe sturzt die App ab.
Wie kann ich das lösen? Das ich wie gesagt in dem Thread den Ball im Fenster bewegen lassen kann z.b. über eine View?

Freue mich über jede weitere hilfe
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Bringen mir die Java-Basics irgendetwas für die Android-Programmierung Android & Cross-Platform Mobile Apps 4
B Android App Programmierung Einsteiger Problem Android & Cross-Platform Mobile Apps 4
C Android Programmierung speziell oder einfach Java Buch kaufen? Android & Cross-Platform Mobile Apps 3
R Android Programmierung Android & Cross-Platform Mobile Apps 3
M Hilfe bei App Programmierung für Android Android & Cross-Platform Mobile Apps 1
? Android einstieg in die Android Programmierung Android & Cross-Platform Mobile Apps 6
K Android Programmierung von App, wie lange muss ich lernen? Android & Cross-Platform Mobile Apps 10
D Android Spiele Programmierung Buch Android & Cross-Platform Mobile Apps 2
J Android-App-Programmierung - Ähnlich normaler Java-Programmierung? Android & Cross-Platform Mobile Apps 6
M Java und App Programmierung in 4 Monaten? Android & Cross-Platform Mobile Apps 7
W Android App Programmierung - Button ganz transparent machen Android & Cross-Platform Mobile Apps 3
J UI-Programmierung Android & Cross-Platform Mobile Apps 30
A Java Symbian Programmierung Android & Cross-Platform Mobile Apps 4
K J2ME programmierung - startprobleme. Android & Cross-Platform Mobile Apps 7
R Java Programmierung auf Handys Android & Cross-Platform Mobile Apps 8
J Bücher über Java-Spiele-Programmierung Android & Cross-Platform Mobile Apps 3
A Von verschiedenen Klassen auf Thread zugreifen Android & Cross-Platform Mobile Apps 2
M Android Stop Swipe Refresh aus anderem Thread Android & Cross-Platform Mobile Apps 2
ms_cikar Thread / Intent als externe klasse Android & Cross-Platform Mobile Apps 1
G Thread in einer Service erstellen Android & Cross-Platform Mobile Apps 0
A Android Von einem Thread auf anderen zugreifen Android & Cross-Platform Mobile Apps 3
C new Thread oder setRunning = true/false Android & Cross-Platform Mobile Apps 12
C Auf innere (Thread)Klasse zugreifen, von anderer Klasse aus Android & Cross-Platform Mobile Apps 3
S Android Kommunikation zwischen UI -> Service -> Thread Android & Cross-Platform Mobile Apps 4
G Pause ohne sleep und ohne zweiten Thread Android & Cross-Platform Mobile Apps 5
G Pause im Programmablauf ohne extra Thread Android & Cross-Platform Mobile Apps 2
JAVAnnik Android Layout ändern in Thread Android & Cross-Platform Mobile Apps 2
Gossi Android Gossis Android Fragen Thread Android & Cross-Platform Mobile Apps 3
H Android ListView Images aus dem Internet via Thread Android & Cross-Platform Mobile Apps 3
L Android Thread Android & Cross-Platform Mobile Apps 4
Kidao Wie startet man ein Thread richtig? Android & Cross-Platform Mobile Apps 4
G Thread und Midlet Android & Cross-Platform Mobile Apps 1
S Neue Activity lässt sich nicht starten Android & Cross-Platform Mobile Apps 28
L Android OutOfMemory beim erneuten Starten der App Android & Cross-Platform Mobile Apps 2
H Android-App starten Android & Cross-Platform Mobile Apps 28
C Activity ohne Aktion starten Android & Cross-Platform Mobile Apps 8
A Fehler beim Starten eines Intents - alles in einer Klasse funktioniert... Android & Cross-Platform Mobile Apps 4
T Android Starten der E-Mail-App Android & Cross-Platform Mobile Apps 6
tuttle64 J2ME SDK starten Android & Cross-Platform Mobile Apps 4
J Totaler JvaME Anfaenger - will Emulator starten. Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Anzeige

Neue Themen


Oben