Threads Methode unterbrechbar machen

Crian

Top Contributor
Wie kann ich die
Code:
run()
Methode eines Threads, in der eine komplexe Berechnung in einer anderen Klasse aufgerufen wird, unterbrechen?

Ich habe es so versucht:

Java:
    @Override
    public void run() {
        String result = "";
        try {
            result = einObjekt.fuehreKomplexeBerechnungDurch();
        }
        catch (InterruptedException e) {
            result = "UNTERBROCHEN";
        }
        // ...
    }

und hab dann von außen halt [c]myThread.interrupt()[/c] aufgerufen. Aber das kompiliert natürlich nicht, da
Code:
fuehreKomplexeBerechnungDurch()
keine
Code:
InterruptedException
wirft.


Wie kann ich das Problem lösen?
 

VfL_Freak

Top Contributor
Moin,

Aber das kompiliert natürlich nicht, da
Code:
fuehreKomplexeBerechnungDurch()
keine
Code:
InterruptedException
wirft.
Wie kann ich das Problem lösen?

Indem Du in Deiner Methode an den von Dir gewünschten Stellen händisch diese Exception wirfst !

Das richtige Stichwort für die Methodendeklaration müsste hier throws sein!

Gruß
Klaus
 

Crian

Top Contributor
Das geht eben nicht, da die komplexe Berechnung in der Ausführung eines komplexen regulären Ausdrucks besteht und ich nicht die Java-RegExp-Maschinerie umschreiben kann oder will.
 
S

SlaterB

Gast
@VfL_Freak
was ist denn das für ein Vorschlag, es soll doch von außen passieren,
und das geht in Java schlicht nicht, außer vielleicht mit Thread.stop(), ich vergesse das immer so schnell wieder,
gibt alle paar Monate so ein Thema,

dein Code müsste ansonsten regelmäßig, z.B. bei Schleifenverarbeitung gut machbar, von selber aus nachschauen ob das Interrupted-Flag gesetzt ist oder sonst eine Kommunikation pflegen und dann aus eigener Entscheidung aus anhalten,
dann durchaus möglicherweise per Exception,
um Speicherung des Zustandes/ Rückkehr musst du dich auch selber kümmern, falles es später weitergehen soll,
vielleicht leichter dort zu bleiben und nur temporär nichts/ etwas anderes zu machen


Interrupt an sich hilft nur wenn der Thread schläft

------

edit:
> Das geht eben nicht, da die komplexe Berechnung in der Ausführung eines komplexen regulären Ausdrucks besteht und ich nicht die Java-RegExp-Maschinerie umschreiben kann oder will.

dann siehts schwer aus..
 
Zuletzt bearbeitet von einem Moderator:

Crian

Top Contributor
Das ganze ist im Moment eine Konzeptstudie. Ich lasse einen regulären Ausdruck laufen und wenn er nach X Sekunden nicht fertig geworden ist, möchte ich den Thread auffordern, sich zu beenden.

Und wie gesagt, in das System für die regulären Ausdrücke kann ich leider nicht eingreifen. Schade, dass das nicht unterbrechbar ist.
 

nrg

Top Contributor
dann spricht aber bei diesem Fall nichts gegen stop. Solang dein Process nicht Transaktionssicher o.ä. sein muss, kannst du ihn doch ruhig die Keule geben...

Java API:
Deprecated. This method is inherently unsafe. Stopping a thread with Thread.stop causes it to unlock all of the monitors that it has locked (as a natural consequence of the unchecked ThreadDeath exception propagating up the stack). If any of the objects previously protected by these monitors were in an inconsistent state, the damaged objects become visible to other threads, potentially resulting in arbitrary behavior. Many uses of stop should be replaced by code that simply modifies some variable to indicate that the target thread should stop running. The target thread should check this variable regularly, and return from its run method in an orderly fashion if the variable indicates that it is to stop running. If the target thread waits for long periods (on a condition variable, for example), the interrupt method should be used to interrupt the wait. For more information, see Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?.
 
S

SlaterB

Gast
stop() geht und sogar suspend() + resume(),
wenn auch deprecated, siehe Beschreibung in der API, da steht ähnliches wie z.T. schon gesagt
Java:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        Runnable r = new Runnable()
            {

                public void run()
                {
                    long start = System.currentTimeMillis();
                    while (true)
                    {
                        long sum = 0;
                        for (int i = 0; i < Integer.MAX_VALUE / 10; i++)
                        {
                            sum += i;
                        }
                        System.out.println("time: " + 
                              (System.currentTimeMillis() - start) % 20000 + ", " + sum);

                    }
                }
            };
        Thread t = new Thread(r);
        t.start();

        Thread.sleep(3000);
        System.out.println("suspend");
        t.suspend();
        Thread.sleep(3000);
        System.out.println("resume");
        t.resume();
        Thread.sleep(3000);
        System.out.println("stop");
        t.stop();
    }
}
Ausgabe:
Code:
time: 627, 23058429812964066
time: 1255, 23058429812964066
time: 1882, 23058429812964066
time: 2509, 23058429812964066
suspend
resume
time: 6148, 23058429812964066
time: 6775, 23058429812964066
time: 7402, 23058429812964066
time: 8030, 23058429812964066
time: 8641, 23058429812964066
stop
 

nrg

Top Contributor
ich finds auch ehrlich gesagt etwas hart, stop direkt deprecated zu machen. soll doch jeder selber entscheiden, ob es passt oder nicht.
 

Volvagia

Top Contributor
Was spricht denn gegen VFLs Vorschlag?
Die komplexe Berechnung muss nur regelmäßig prüfen ob der currentThread interrupted ist und wenn dann einfach eine Exception schmeißen. ???:L
 
S

SlaterB

Gast
dagegen spricht einerseits, wie gesagt wurde, dass es sich hier um unveränderbaren API-RegEx-Code handelt,
und andererseits, dass man quasi beliebigen Programmcode damit verschandeln kann/ muss, vielleicht irgendwelche komplett andere Klassen, die eigentlich gar nicht wissen welcher Thread sie gerade ausführt, ob interrupt jeweils wirklich stop sein soll oder nicht
 

Crian

Top Contributor
Ich hab nun wie vorgeschlagen stop() verwendet und es funktioniert damit so, wie ich es mir dachte.

Bei Interesse kann ich das ganze auch posten, weiß aber nicht, ob das erwünscht ist.
 

Crian

Top Contributor
Also zunächst mal die einfachen Sachen. Ich habe eine Klasse, die eine u.u. sehr lang dauernde Berechnung durchführt:

Java:
package threads.extended;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SpecialRegularExpression {

    private final static Pattern pattern = Pattern.compile(
            "c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*c*d");

    public String workWith(String jobString) {
        Matcher m = pattern.matcher(jobString);
        if (m.matches()) {
            return "getroffen";
        }
        else {
            return "nicht getroffen";
        }
    }

}

Natürlich ist der Reguläre Ausdruck sinnlos, aber er dauert u.U. schön lange.

Nun ist die normale Herangehensweise diese:

Java:
package threads.extended.start;

import java.util.ArrayList;
import java.util.List;

import threads.extended.SpecialRegularExpression;

public class SimpleBadStarter1 {

    public static void main(String[] args) {
        List<String> jobStrings = new ArrayList<String>();
        jobStrings.add("a");
        jobStrings.add("b");
        jobStrings.add("c");
        jobStrings.add("cccccccccccccccccccccccccccccccccccccc");
        jobStrings.add("ccccccccccccccccccccccccccccccccccccc");
        jobStrings.add("d");
        jobStrings.add("e");

        SpecialRegularExpression worker = new SpecialRegularExpression();
        for (String jobString : jobStrings) {
            String result = worker.workWith(jobString);
            System.out.println(jobString + " -> " + result);
        }
    }

}

Nach

Code:
a -> nicht getroffen
b -> nicht getroffen
c -> nicht getroffen

Steht der Prozess und wartet auf die Beendigung des regulären Ausdrucks. Das könnte dauern...

Deshalb habe ich die folgende Klasse ins Spiel gebracht:

Java:
package threads.extended;

public class RegularExpressionWorker {

    private class DoTheWork extends Thread {

        private final long FOR_A_DAY = 1000         // 1 Sekunde
                                       * 60         // 1 Minute
                                       * 60         // 1 Stunde
                                       * 24         // 24 Stunden
                                       ;

        @Override
        public void run() {
            while (!isInterrupted()) {
                try {
                    sleep(FOR_A_DAY);
                }
                catch (InterruptedException e) {
                    interrupt();
                }
            }
        }

        public String workWith(String jobString) {
            SpecialRegularExpression special = new SpecialRegularExpression();
            String result = special.workWith(jobString);
            return result;
        }

    }

    private DoTheWork theWorkingThread;

    public RegularExpressionWorker() {
        theWorkingThread = new DoTheWork();
    }

    /** Lässt den Arbeitsthread die Arbeit machen und gibt das Ergebnis zurück. */
    public String workWith(String jobString) {
        return theWorkingThread.workWith(jobString);
    }

    /**
     * Bricht die aktuelle Verarbeitung ab und stellt für weitere Bearbeitungen
     * einen neuen Arbeitsthread zur Verfügung.
     */
    @SuppressWarnings("deprecation")
    public void cancelPatternMatching() {
        theWorkingThread.stop();
        theWorkingThread = null;
        theWorkingThread = new DoTheWork();
    }

}

Aber auch diese Klasse direkt angewendet bringt natürlich keinerlei Besserung, da die Abbruchkriterien ja nicht in ihrem Inneren stecken:

Java:
package threads.extended.start;

import java.util.ArrayList;
import java.util.List;

import threads.extended.RegularExpressionWorker;

public class SimpleBadStarter2 {

    public static void main(String[] args) {
        List<String> jobStrings = new ArrayList<String>();
        jobStrings.add("a");
        jobStrings.add("b");
        jobStrings.add("c");
        jobStrings.add("cccccccccccccccccccccccccccccccccccccc");
        jobStrings.add("ccccccccccccccccccccccccccccccccccccc");
        jobStrings.add("d");
        jobStrings.add("e");

        RegularExpressionWorker worker = new RegularExpressionWorker();
        for (String jobString : jobStrings) {
            String result = worker.workWith(jobString);
            System.out.println(jobString + " -> " + result);
        }
    }

}

Nach

Code:
a -> nicht getroffen
b -> nicht getroffen
c -> nicht getroffen

Steht das ganze wieder und wartet auf den Abbruch, so ist nichts gewonnen.

Etwas besser sieht das ganze so aus:

Java:
package threads.extended.start;

import java.util.ArrayList;
import java.util.List;

import threads.extended.RegularExpressionWorker;

public class BetterStarter {

    public static void main(String[] args) {
        new BetterStarter();
    }

    public BetterStarter() {
        List<String> list = new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("cccccccccccccccccccccccccccccccccccccc");
        list.add("ccccccccccccccccccccccccccccccccccccc");
        list.add("d");
        list.add("e");

        RegularExpressionWorker worker = new RegularExpressionWorker();
        for (String jobString : list) {
            String result = calculateResult(jobString, worker);
            System.out.println(jobString + " -> " + result);
        }
    }

    private class MyThread extends Thread {
        private String jobString;
        private RegularExpressionWorker worker;
        private String result;
        public MyThread(String jobString, RegularExpressionWorker worker) {
            this.jobString = jobString;
            this.worker = worker;
        }
        public void run() {
            result = worker.workWith(jobString);
        }
        public String getResult() {
            return result;
        }
    }

    @SuppressWarnings("deprecation")
    private String calculateResult(String jobString,
            RegularExpressionWorker worker) {
        final long MAXIMAL_JOB_RUNTIME_IN_MILLIS = 10 * 1000;

        MyThread myThread = new MyThread(jobString, worker);
        myThread.start();

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

        if (myThread.isAlive()) {
            System.out.println("Interrupted!");
            myThread.stop();
            return "CANCELED";
        }

        return myThread.getResult();
    }

}

Es dauert, aber dann bekommt man zu lesen:

Code:
a -> nicht getroffen
b -> nicht getroffen
c -> nicht getroffen
Interrupted!
cccccccccccccccccccccccccccccccccccccc -> CANCELED
Interrupted!
ccccccccccccccccccccccccccccccccccccc -> CANCELED
d -> getroffen
e -> nicht getroffen

Was schon eher in unserem Sinne ist.

(Fortsetzung folgt)
 

Crian

Top Contributor
Die eigentliche Nutzung ist etwas komplexer, da ich die Jobs (hier einfache Strings) nicht sequentiell, sondern parallel ablaufen lassen will.

Da sieht der Start so aus:

Java:
package threads.extended.start;

import java.util.ArrayList;
import java.util.List;

import threads.extended.Organizer;

public class Starter {

    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("cccccccccccccccccccccccccccccccccccccc");
        list.add("ccccccccccccccccccccccccccccccccccccc");
        list.add("d");
        list.add("e");
        Organizer o = new Organizer(list);
        o.work();
    }

}


Das Organisations-Objekt sieht so aus:

Java:
package threads.extended;

import java.util.ArrayList;
import java.util.List;

public class Organizer {

    private static final long MAXIMAL_JOB_RUNTIME_IN_MILLIS = 10 * 1000;

    private RegularExpressionWorker regularExpressionWorker;
    private List<String> jobStrings;
    private List<Job> jobs;

    /** Konstruktor */
    public Organizer(List<String> list) {
        jobStrings = list;
        regularExpressionWorker = new RegularExpressionWorker();
        jobs = new ArrayList<Job>();
    }

    /** Start der eigentlichen Verarbeitung. */
    public void work() {
        System.out.println(this.getClass().getName() + ": Start");

        for (String jobString : jobStrings) {
            startJob(jobString);
            pause(1);
        }

        boolean allDone = false;
        while (!allDone) {
            pause(2);
            allDone = checkJobs();
        }

        printResumee();

        System.out.println(this.getClass().getName() + ": normales Ende");
    }

    /** Startet einen Job. */
    private void startJob(String jobString) {
        System.out.println(this.getClass().getName()
                + ": Starte Verarbeitung von " + jobString);
        Job job = new Job(jobString, regularExpressionWorker);
        jobs.add(job);
    }

    /** Wartet die angegebene Zeit in Sekunden. */
    private void pause(long seconds) {
        try {
            Thread.sleep(1000 * seconds);
        }
        catch (InterruptedException e) {
        }
    }

    /** Überprüft die Jobs. */
    private boolean checkJobs() {
        boolean allDone = true;

        for (Job job : jobs) {
            if (job.isAlive()) {
                allDone = false;
                long since = job.isRunningSince();
                if (since > MAXIMAL_JOB_RUNTIME_IN_MILLIS) {
                    job.cancel();
                }
            }
        }

        return allDone;
    }

    /** Schreibt einen Abschlussbericht. */
    private void printResumee() {
        System.out.println(this.getClass().getName() + ": Resumee:");
        List<Job> canceled = new ArrayList<Job>();
        for (Job job : jobs) {
            System.out.println("    Job " + job.getJobString() + " ergab "
                    + job.getResult());
            if (job.wasCanceled()) {
                canceled.add(job);
            }
        }
        if (canceled.size() > 0) {
            System.out.println("    ABGEBROCHENE JOBS:");
            for (Job job : canceled) {
                System.out.println("        " + job.getJobString());
            }
        }
    }

}

Die Jobklassen so:

Java:
package threads.extended;

public class Job {

    private long startTime;
    private String jobString;
    private WorkerThread workerThread;
    private boolean canceled;

    public Job(String jobString, RegularExpressionWorker regularExpressionWorker) {
        this.jobString = jobString;
        startTime = java.lang.System.currentTimeMillis();
        canceled = false;
        workerThread = new WorkerThread(jobString, regularExpressionWorker);
        workerThread.start();
    }

    /** Gibt die Laufzeit des Jobs in Millisekunden zurück. */
    public long isRunningSince() {
        return java.lang.System.currentTimeMillis() - startTime;
    }

    public void cancel() {
        canceled = true;
        workerThread.cancel();
    }

    public boolean isAlive() {
        boolean isAlive = workerThread.isAlive();
        System.out.println("Job [" + jobString + "] lebt "
                + (isAlive ? "noch" : "nicht mehr"));
        return isAlive;
    }

    public String getResult() {
        return workerThread.getResult();
    }

    boolean wasCanceled() {
        return canceled;
    }

    public String getJobString() {
        return jobString;
    }

}

Und die eigentlichen Worker-Threads so:

Java:
package threads.extended;

public class WorkerThread extends Thread {

    private String jobString;
    private RegularExpressionWorker regularExpressionWorker;
    private String result;

    public WorkerThread(String jobString,
            RegularExpressionWorker regularExpressionThread) {
        this.jobString = jobString;
        this.regularExpressionWorker = regularExpressionThread;
        this.result = "";
    }

    @Override
    public void run() {
        System.out.println(this.getClass().getName() + "(" + jobString
                + "): Start");

        result = regularExpressionWorker.workWith(jobString);

        System.out.println(this.getClass().getName() + "(" + jobString
                + "): berechnete zu [" + jobString + "] das Ergebnis ["
                + result + "].");

        System.out.println(this.getClass().getName() + "(" + jobString
                + "): normales Ende");
    }

    @SuppressWarnings("deprecation")
    public void cancel() {
        regularExpressionWorker.cancelPatternMatching();
        result = "CANCELED";
        System.out.println(this.getClass().getName() + "(" + jobString
                + "): Abgebrochen!");
        stop();
    }

    public String getResult() {
        return result;
    }

}

Damit bekommt man folgende Ausgabe:

Code:
threads.extended.Organizer: Start
threads.extended.Organizer: Starte Verarbeitung von a
threads.extended.WorkerThread(a): Start
threads.extended.WorkerThread(a): berechnete zu [a] das Ergebnis [nicht getroffen].
threads.extended.WorkerThread(a): normales Ende
threads.extended.Organizer: Starte Verarbeitung von b
threads.extended.WorkerThread(b): Start
threads.extended.WorkerThread(b): berechnete zu [b] das Ergebnis [nicht getroffen].
threads.extended.WorkerThread(b): normales Ende
threads.extended.Organizer: Starte Verarbeitung von c
threads.extended.WorkerThread(c): Start
threads.extended.WorkerThread(c): berechnete zu [c] das Ergebnis [nicht getroffen].
threads.extended.WorkerThread(c): normales Ende
threads.extended.Organizer: Starte Verarbeitung von cccccccccccccccccccccccccccccccccccccc
threads.extended.WorkerThread(cccccccccccccccccccccccccccccccccccccc): Start
threads.extended.Organizer: Starte Verarbeitung von ccccccccccccccccccccccccccccccccccccc
threads.extended.WorkerThread(ccccccccccccccccccccccccccccccccccccc): Start
threads.extended.Organizer: Starte Verarbeitung von d
threads.extended.WorkerThread(d): Start
threads.extended.WorkerThread(d): berechnete zu [d] das Ergebnis [getroffen].
threads.extended.WorkerThread(d): normales Ende
threads.extended.Organizer: Starte Verarbeitung von e
threads.extended.WorkerThread(e): Start
threads.extended.WorkerThread(e): berechnete zu [e] das Ergebnis [nicht getroffen].
threads.extended.WorkerThread(e): normales Ende
Job [a] lebt nicht mehr
Job [b] lebt nicht mehr
Job [c] lebt nicht mehr
Job [cccccccccccccccccccccccccccccccccccccc] lebt noch
Job [ccccccccccccccccccccccccccccccccccccc] lebt noch
Job [d] lebt nicht mehr
Job [e] lebt nicht mehr
Job [a] lebt nicht mehr
Job [b] lebt nicht mehr
Job [c] lebt nicht mehr
Job [cccccccccccccccccccccccccccccccccccccc] lebt noch
Job [ccccccccccccccccccccccccccccccccccccc] lebt noch
Job [d] lebt nicht mehr
Job [e] lebt nicht mehr
Job [a] lebt nicht mehr
Job [b] lebt nicht mehr
Job [c] lebt nicht mehr
Job [cccccccccccccccccccccccccccccccccccccc] lebt noch
threads.extended.WorkerThread(cccccccccccccccccccccccccccccccccccccc): Abgebrochen!
Job [ccccccccccccccccccccccccccccccccccccc] lebt noch
Job [d] lebt nicht mehr
Job [e] lebt nicht mehr
Job [a] lebt nicht mehr
Job [b] lebt nicht mehr
Job [c] lebt nicht mehr
Job [cccccccccccccccccccccccccccccccccccccc] lebt nicht mehr
Job [ccccccccccccccccccccccccccccccccccccc] lebt noch
threads.extended.WorkerThread(ccccccccccccccccccccccccccccccccccccc): Abgebrochen!
Job [d] lebt nicht mehr
Job [e] lebt nicht mehr
Job [a] lebt nicht mehr
Job [b] lebt nicht mehr
Job [c] lebt nicht mehr
Job [cccccccccccccccccccccccccccccccccccccc] lebt nicht mehr
Job [ccccccccccccccccccccccccccccccccccccc] lebt nicht mehr
Job [d] lebt nicht mehr
Job [e] lebt nicht mehr
threads.extended.Organizer: Resumee:
    Job a ergab nicht getroffen
    Job b ergab nicht getroffen
    Job c ergab nicht getroffen
    Job cccccccccccccccccccccccccccccccccccccc ergab CANCELED
    Job ccccccccccccccccccccccccccccccccccccc ergab CANCELED
    Job d ergab getroffen
    Job e ergab nicht getroffen
    ABGEBROCHENE JOBS:
        cccccccccccccccccccccccccccccccccccccc
        ccccccccccccccccccccccccccccccccccccc
threads.extended.Organizer: normales Ende

Später werden die Jobs nicht die Bearbeitung einzelner Strings sein. Und es wird auch nicht um die Anwendung eines einzelnen Regulären Ausdrucks gehen. Es werden vielmehr Dateien verarbeitet und mit einer Reihe von regulären Ausdrücken behandelt, wo es nicht auszuschließen ist, dass einige davon in speziellen Fällen sehr lange laufen.

Mit diesem System möchte ich sicherstellen, dass ich am Ende sagen kann, welche Teile komplett bearbeitet wurden und welche nur teilweise.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Rekursive Methode Java Basics - Anfänger-Themen 13
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
Leyla Spezifischte Methode Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
M Methode sperren bis ein Kriterium erfüllt wurde Java Basics - Anfänger-Themen 3
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
B Wie kann ich folgende Klasse/Methode per Button ausführen? Java Basics - Anfänger-Themen 1
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
til237 Iterative Methode in rekursive Methode umschreiben Java Basics - Anfänger-Themen 4
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
D next() Methode mehrfach verwenden Java Basics - Anfänger-Themen 1
Ostkreuz Methoden Von Dezimal zu Hexadezimal Methode toHex Java Basics - Anfänger-Themen 2
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
N Throw an Main Methode übergeben Java Basics - Anfänger-Themen 7
M Methoden Methode 'wiederhole' nicht gefunden (Uebersetzungsfehler) Java Basics - Anfänger-Themen 1
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
M Anzahl Kommandozeilenparamter mittels Methode Java Basics - Anfänger-Themen 11
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
J Die statische Main-Methode ändert Instanzvariable? Java Basics - Anfänger-Themen 10
D Methode aus dem Aufrufer aufrufen Java Basics - Anfänger-Themen 1
T IOStreams read(byte[]b) methode Java Basics - Anfänger-Themen 2
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
D Warum kann ich hier nicht auf die Methode zugreifen? Java Basics - Anfänger-Themen 5
M generate Methode für Streams Java Basics - Anfänger-Themen 6
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
I Optionaler Parameter bei Methode, der nur optional ist? Java Basics - Anfänger-Themen 6
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
T Linked List set-Methode Java Basics - Anfänger-Themen 2
D Arrays an replaceAll-Methode übergeben Java Basics - Anfänger-Themen 12
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
W Equals-Methode überschreiben bei composition Java Basics - Anfänger-Themen 20
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
V Methoden printChar Methode mit Rückgabetyp void Java Basics - Anfänger-Themen 26
F Graph Tiefensuche Methode Java Basics - Anfänger-Themen 7
Jambolo Methode, welche die 3 letzten Parameter Werte speichert Java Basics - Anfänger-Themen 20
berserkerdq2 wie funktioniert contenthandler, was muss ich bei der Methode startElement und endElement tun? Java Basics - Anfänger-Themen 11
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
S Methode Java Basics - Anfänger-Themen 4
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
U Methode wird genutzt, ohne dass ich die aufrufe? Java Basics - Anfänger-Themen 4
F nach Methode Programm nicht beenden Java Basics - Anfänger-Themen 9
Liroyd Methode mit Objektvariabel rechnen? Java Basics - Anfänger-Themen 6
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
D Methode um mögliche Rezepte auszugeben Java Basics - Anfänger-Themen 12
U Warum kann ich die Methode in der ENUM Klasse nicht aufrufen? Und warum geht die Switch nicht? Java Basics - Anfänger-Themen 8
J Hallo zusammen , was macht diese Methode hier genau? Java Basics - Anfänger-Themen 3
D Array in Main Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 3
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
G jButton führt Main Methode nicht richtig aus Java Basics - Anfänger-Themen 3
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
A Ein Array bearbeiten und in einer anderen Methode nutzen Java Basics - Anfänger-Themen 6
A Ergebnis einer Methode bei einer anderen verwenden Java Basics - Anfänger-Themen 13
L Iteratorform und Methode mit variabler Parameterzahl Java Basics - Anfänger-Themen 31
F Methode ArrayList mit Eingabewert Java Basics - Anfänger-Themen 2
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
Csircc Rekursive Methode Stack Overflow Java Basics - Anfänger-Themen 10
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
M Wie kann eine Methode eine andere Methode um Werte wie z.B. 1 erhöhen? Java Basics - Anfänger-Themen 6
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
D mehrere Berechnungen in einer Methode Java Basics - Anfänger-Themen 9
H String Repräsentation eines Rechtecks mit Instanz-Methode Java Basics - Anfänger-Themen 8
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
X Methoden Methode zur Punktezählung in Blackjack Java Basics - Anfänger-Themen 2
W Methode ändern Java Basics - Anfänger-Themen 65
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
W Methode, die mit einem Datum arbeitet? Java Basics - Anfänger-Themen 22
E Einrücken inner der toString()-Methode Java Basics - Anfänger-Themen 34

Ähnliche Java Themen

Neue Themen


Oben