Permanente Zeitabfrage

Kotelettklopfer

Bekanntes Mitglied
Hallo zusammen,

mein neues Übungsprojekt soll ein Programm werden, indem zu bestimmten Zeiten der User optisch/akkustisch eine Mitteilung bekommt über ein bevorstehendes Ereignis.

Im groben geht es um einen "BossTimer" für ein online Spiel. Hier werde ich alle Bosse mit ihren festen Erscheinungszeiten einpflegen und möchte dann, dass der User zu den jeweiligen Uhrzeiten "gewarnt" wird.

Ich habe bereits hinbekommen, die aktuelle Zeit zu erfassen und in einem String abzulegen.
java.text.SimpleDateFormat;
java.util.Date;


Leider bin ich absoluter Neuling und frage mich, was ich tun muss damit die Anwendung nach Start kontinuierlich die Uhrzeit abfragt und gegebenenfalls einen Text ausgibt zb. ( Boss XY erscheint in 5 Minuten).

Ich hoffe mein Problem ist verständlich und nicht allzu lächerlich xD

Danke Euch
 

Kotelettklopfer

Bekanntes Mitglied
Das klappt super Danke. Folgendes Problem habe ich nun:

Java:
 switch (timeNow) {

            case "22:40:30":
                System.out.println("Test Boss 1");

            case "22:40:45":
                System.out.println("Test Boss 2");
        }

Er bringt mir zur korrekten Uhrzeit den ersten Text "Test Boss 1" , haut aber sofort auch den zweiten Text raus obwohl dieser Text erst 15 sek später erfolgen dürfte.
Muss ich hier mit break; nach jedem case arbeiten oder ist switch hier die falsche Anweisung?

Denke doch bei break geht er aus der Anweisung raus und stoppt kmpl. oder?
 

Kotelettklopfer

Bekanntes Mitglied
Muss leider noch einmal nerven :-/

Wenn eine Aktion durch mehrere case ausgelöst werden soll, gibt es da eine Kurzfassung?

Also anstatt:

case "22:00:00"
case "22:01:00"
case "22:15:15"

sowas wie

case "22:00:00, 22:01:00, 22:15:15"

Ich fände die erste "normale" Variante etwas heftig, da ich so auf 324 cases kommen würde (27 Bosse mit jeweils 12 Zeiten).

Im www und meinen Büchern habe ich leider nichts dazu gefunden.
 

Kotelettklopfer

Bekanntes Mitglied
Aiaiai wir reden von sowas wie Arrays? Sind Array kompatibel mit case ?
Was habe ich mir hier als Selbststudium bloß vorgenommen :)


Edit:
Habe es gerade mal mit dem trennen durch "," probiert. Es scheint so zu funktionieren und reicht mir erstmal für meinen Lernstand.
Merke: Einfach auch mal was ausprobieren, bevor man fragt
 
Zuletzt bearbeitet:

Kotelettklopfer

Bekanntes Mitglied
Hey, habe die Geschichte jetzt per "," getrennt. Läuft super inkl. akkustischer Notification :)
Durchfall hätte den ganzen Code noch mehr aufgebläht, daher wollte ich ne kürzere Alternative.
Das einzige was ich nicht verstehe, ist die "thrown" Geschichte in Verbindung mit der "catch" Methode. Intelij schlug das vor, da habe ich es so ergänzen lassen.

Java:
private static void output() throws MidiUnavailableException, InvalidMidiDataException, InterruptedException {
        SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
        String timeNow = format.format(new Date());

        switch (timeNow) {

            case "00:15:00", "03:15:00", "06:15:00", "09:15:00", "12:15:00", "15:15:00", "18:15:00", "21:15:00":
                System.out.println("[&BLEAAAA=] Modniir Ulgoth startet in 15 Minuten");
                synth();
                break;

            case "23:45:00", "02:45:00", "05:45:00", "08:45:00", "11:45:00", "14:45:00", "17:45:00", "20:45:00":
                System.out.println("[&BE4DAAA=] Der Zerschmetterer startet in 15 Minuten");
                synth();
                break;

            case "02:45:01", "05:45:01", "09:45:00", "14:15:00", "18:45:00", "21:45:00":
                System.out.println("[&BKoBAAA=] Dreifacher Wurm startet in 15 Minuten");
                synth();
                break;
 

Kotelettklopfer

Bekanntes Mitglied
Ich wieder .. Verzweiflung macht sich breit xD

Das Programm tut was es soll, allerdings zur Zeit nur in der Konsole.
Der Text soll jetzt in meine GUI.
Frame ist erstellt und wird angezeigt... wie bekomme ich den Text der einzelnen "case" jetzt in der GUI angezeigt?


[CODE lang="java" title="Applikation"]import javax.sound.midi.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.swing.*;

public class Application {

public static void main(String[] args) {

JFrame jf = new Frame();


ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(
new Runnable() {
@Override
public void run() {
try {
output();
} catch (MidiUnavailableException e) {
e.printStackTrace();
} catch (InvalidMidiDataException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}


}
},
1 /* Startverzögerung */,
1 /* Dauer */,
TimeUnit.SECONDS);


}



private static void output() throws MidiUnavailableException, InvalidMidiDataException, InterruptedException {
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
String timeNow = format.format(new Date());

switch (timeNow) {

case "00:15:00", "03:15:00", "06:15:00", "09:15:00", "12:15:00", "15:15:00", "18:15:00", "21:15:00":
System.out.println("[&BLEAAAA=] Modniir Ulgoth startet in 15 Minuten");
synth();
break;

case "23:45:00", "02:45:00", "05:45:00", "08:45:00", "11:45:00", "14:45:00", "17:45:00", "20:45:00":
System.out.println("[&BE4DAAA=] Der Zerschmetterer startet in 15 Minuten");
synth();
break;

case "02:45:01", "05:45:01", "09:45:00", "14:15:00", "18:45:00", "21:45:00":
System.out.println("[&BKoBAAA=] Dreifacher Wurm startet in 15 Minuten");
synth();
break;

case "01:00:00", "03:00:00", "05:00:00", "07:00:00", "09:00:00", "11:00:00", "13:00:00", "15:00:00",
"17:00:00", "19:00:00", "21:00:00", "23:00:00":
System.out.println("[&BEEFAAA=] Großer Jungle Wurm startet in 15 Minuten");
synth();
break;

case "00:30:00", "02:30:00", "04:30:00", "06:30:00", "08:30:00", "10:30:00", "12:30:00", "14:30:00",
"16:30:00", "18:30:00", "20:30:00", "22:30:00":
System.out.println("[&BEcAAAA=] Feuer Elementar startet in 15 Minuten");
synth();
break;

case "02:15:00", "05:15:00", "08:15:00", "11:15:00", "14:15:01", "17:15:00", "20:15:00", "23:15:00":
System.out.println("[&BM0CAAA=] Megazerstörer startet in 15 Minnuten");
synth();
break;

case "00:00:00", "02:00:00", "04:00:00", "06:00:00", "08:00:00", "10:00:00", "12:00:00", "14:00:00",
"16:00:00", "18:00:00", "20:00:00", "22:00:00":
System.out.println("[&BMIDAAA=] Svanir Schamane startet in 15 Minuten");
synth();
break;

case "01:45:00", "04:45:00", "08:45:01", "13:15:00", "17:45:01", "20:45:01":
System.out.println("[&BNABAAA=] Tequatl startet in 15 Minuten");
synth();
break;

case "01:45:01", "04:45:01", "07:45:00", "10:45:00", "13:45:00", "16:45:00", "19:45:00", "22:45:00":
System.out.println("[&BKgBAAA=] Taidha Covington startet in 15 Minuten");
synth();
break;

case "01:30:00", "03:30:00", "05:30:00", "07:30:00", "09:30:00", "11:30:00", "13:30:00", "15:30:00",
"17:30:00", "19:30:00", "21:30:00", "23:30:00":
System.out.println("[&BPcAAAA=] Schatten Behemoth startet in 15 Minuten");
synth();
break;

case "01:15:00", "04:15:00", "07:15:00", "10:15:00", "13:15:01", "16:15:00", "19:15:00", "22:15:00":
System.out.println("[&BHoCAAA=] Klaue von Jormag startet in 15 Minuten");
synth();
break;

case "00:45:00", "03:45:00", "07:45:01", "12:15:01", "16:45:01", "19:45:01":
System.out.println("[&BNcGAAA=] Karka Königin startet in 15 Minuten");
synth();
break;

case "00:45:01", "03:45:01", "06:45:00", "09:45:01", "12:45:00", "15:45:00", "18:45:01", "21:45:01":
System.out.println("[&BNQCAAA=] Inquestur Golem Mark II startet in 15 Minuten");
synth();
break;

case "22:05:00":


}

}

private static void synth() throws MidiUnavailableException, InvalidMidiDataException, InterruptedException {

Synthesizer synth = MidiSystem.getSynthesizer();
synth.open();
Receiver rcvr = synth.getReceiver();
ShortMessage msg = new ShortMessage();
msg.setMessage(ShortMessage.NOTE_ON, 0, 30, 30);
rcvr.send(msg, -1);
Thread.sleep(100);
msg.setMessage(ShortMessage.NOTE_OFF, 0, 40, 0);
msg.setMessage(ShortMessage.NOTE_ON, 0, 40, 40);
rcvr.send(msg, -1);
Thread.sleep(200);
msg.setMessage(ShortMessage.NOTE_OFF, 0, 40, 0);
msg.setMessage(ShortMessage.NOTE_ON, 0, 50, 50);
rcvr.send(msg, -1);
Thread.sleep(300);
msg.setMessage(ShortMessage.NOTE_OFF, 0, 40, 0);
msg.setMessage(ShortMessage.NOTE_ON, 0, 60, 60);
rcvr.send(msg, -1);
Thread.sleep(400);
msg.setMessage(ShortMessage.NOTE_OFF, 0, 40, 0);
msg.setMessage(ShortMessage.NOTE_ON, 0, 80, 80);
rcvr.send(msg, -1);
Thread.sleep(500);
msg.setMessage(ShortMessage.NOTE_OFF, 0, 40, 0);
msg.setMessage(ShortMessage.NOTE_ON, 0, 90, 90);
rcvr.send(msg, -1);
Thread.sleep(4000);
msg.setMessage(ShortMessage.NOTE_OFF, 0, 40, 0);
rcvr.send(msg, -1);
synth.close();
}
}


[CODE lang="java" title="GUI"]import javax.swing.*;

public class Frame extends JFrame {

JLabel text;

public Frame() {
setVisible(true);
setSize(500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setTitle("GW2 Boss Timer");
setResizable(false);
setLayout(null);

text = new JLabel ();
text.setBounds(0,0,500,10);
add(text);
}

}
[/CODE]
 

mihe7

Top Contributor
1. Du brauchst in Frame eine Methode, um den Text des Labels zu setzen
2. Du brauchst Zugriff auf jf in output. Am einfachsten entfernst Du die static-Geschichten (außer bei main, natürlich) und führst eine Instanzvariable für jf ein und erzeugst in main() eine Instanz von Application.
3. Bei Verwendung der Methode aus 1. au einem anderen Thread heraus, musst Du dafür sorgen, dass der UI-Code im UI-Thread ausgeführt wird, in Swing ist das der EDT (Event Dispatch Thread). Dafür verwendest Du dann SwingUtilities.invokeLater().

Das ist eigentlich schon alles.
 

Kotelettklopfer

Bekanntes Mitglied
Ok, das ist mir "noch" zu hoch :)
1. Wäre ab Zeile 176 nicht die von dir angesprochene Methode ?
2. Das muss ich mir anschauen, gerade versteh ich das noch nicht ganz.
3. auch hier werde ich mich noch belesen müssen.

Danke dir
 

mihe7

Top Contributor
1. Das ist die Methode von JLabel. Auf JLabel solltest Du von außen aber keinen Zugriff haben, daher braucht Frame eine Methode, die das von außen ermöglicht. Die Methode sieht einfach so aus:
Java:
public void setStatus(String status) {
    text.setText(status);
}

2. Bei dir ist in Application alles static. Wenn Du static entfernst, musst Du eine Instanz von Application erstellen, um die Methoden aufrufen zu können. In steht z. B. einfach:
Java:
Application app = new Application();
app.start();
In der Methode start steht dann das, was vorher in main stand, mit einem kleinen Unterschied:
Java:
private void start() {
        frame = new Frame();

        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        // ...
Ich habe jf in frame umbenannt, der Lesbarkeit wegen, der eigentliche Punkt ist aber, dass frame keine lokale Variable mehr ist. Wir machen daraus eine Instanzvariable:
Java:
private Frame frame;

3. Hierfür schreibst Du Dir am besten eine Methode in Application, die SwingUtitities verwendet, um frame.setStatus aufzurufen.

Zusammen:
Java:
public class Application {

    private Frame frame;

    private void start() {
        frame = new Frame();

        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        // Dein Code aus main      
    }

    private void output() throws MidiUnavailableException, InvalidMidiDataException, InterruptedException {
        // Dein Code, der vom scheduler aufgerufen wird und seinerseits updateStatus aufruft
    }

    private void updateStatus(String status) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                frame.setStatus(status);
            }
        });
    }

    public static void main(String[] args) {
        Application app = new Application();
        app.start();
    }
}
 

Kotelettklopfer

Bekanntes Mitglied
Vielen Dank für deine Unterstützung. Glaube fast, dass ich mir hier zuviel vorgenommen habe mit meinem derzeitigem Lernstand von 2 Monaten ca.
Hier mal der hoffentlich korrekt angepasst Code (leider erstmal nur versucht abzutippen (oft weiß ich garnicht was hier passiert, das muss ich nachgelagert nochmal betrachten)

[CODE lang="java" title="Klasse Applikation"]import javax.sound.midi.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.swing.*;

public class Application {

private Frame frame;

private void start() {
frame = new Frame();

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(
new Runnable() {
@Override
public void run() {
try {
output();
} catch (MidiUnavailableException e) {
e.printStackTrace();
} catch (InvalidMidiDataException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}


}
},
1 /* Startverzögerung */,
1 /* Dauer */,
TimeUnit.SECONDS);
}


private void output() throws MidiUnavailableException, InvalidMidiDataException, InterruptedException {
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
String timeNow = format.format(new Date());


switch (timeNow) {

case "00:15:00", "03:15:00", "06:15:00", "09:15:00", "12:15:00", "15:15:00", "18:15:00", "21:15:00":
System.out.println("[&BLEAAAA=] Modniir Ulgoth startet in 15 Minuten");
synth();
break;

case "23:45:00", "02:45:00", "05:45:00", "08:45:00", "11:45:00", "14:45:00", "17:45:00", "20:45:00":
System.out.println("[&BE4DAAA=] Der Zerschmetterer startet in 15 Minuten");
synth();
break;

case "02:45:01", "05:45:01", "09:45:00", "14:15:00", "18:45:00", "21:45:00":
System.out.println("[&BKoBAAA=] Dreifacher Wurm startet in 15 Minuten");
synth();
break;

case "01:00:00", "03:00:00", "05:00:00", "07:00:00", "09:00:00", "11:00:00", "13:00:00", "15:00:00",
"17:00:00", "19:00:00", "21:00:00", "23:00:00":
System.out.println("[&BEEFAAA=] Großer Jungle Wurm startet in 15 Minuten");
synth();
break;

case "00:30:00", "02:30:00", "04:30:00", "06:30:00", "08:30:00", "10:30:00", "12:30:00", "14:30:00",
"16:30:00", "18:30:00", "20:30:00", "22:30:00":
System.out.println("[&BEcAAAA=] Feuer Elementar startet in 15 Minuten");
synth();
break;

case "02:15:00", "05:15:00", "08:15:00", "11:15:00", "14:15:01", "17:15:00", "20:15:00", "23:15:00":
System.out.println("[&BM0CAAA=] Megazerstörer startet in 15 Minnuten");
synth();
break;

case "00:00:00", "02:00:00", "04:00:00", "06:00:00", "08:00:00", "10:00:00", "12:00:00", "14:00:00",
"16:00:00", "18:00:00", "20:00:00", "22:00:00":
System.out.println("[&BMIDAAA=] Svanir Schamane startet in 15 Minuten");
synth();
break;

case "01:45:00", "04:45:00", "08:45:01", "13:15:00", "17:45:01", "20:45:01":
System.out.println("[&BNABAAA=] Tequatl startet in 15 Minuten");
synth();
break;

case "01:45:01", "04:45:01", "07:45:00", "10:45:00", "13:45:00", "16:45:00", "19:45:00", "22:45:00":
System.out.println("[&BKgBAAA=] Taidha Covington startet in 15 Minuten");
synth();
break;

case "01:30:00", "03:30:00", "05:30:00", "07:30:00", "09:30:00", "11:30:00", "13:30:00", "15:30:00",
"17:30:00", "19:30:00", "21:30:00", "23:30:00":
System.out.println("[&BPcAAAA=] Schatten Behemoth startet in 15 Minuten");
synth();
break;

case "01:15:00", "04:15:00", "07:15:00", "10:15:00", "13:15:01", "16:15:00", "19:15:00", "22:15:00":
System.out.println("[&BHoCAAA=] Klaue von Jormag startet in 15 Minuten");
synth();
break;

case "00:45:00", "03:45:00", "07:45:01", "12:15:01", "16:45:01", "19:45:01":
System.out.println("[&BNcGAAA=] Karka Königin startet in 15 Minuten");
synth();
break;

case "00:45:01", "03:45:01", "06:45:00", "09:45:01", "12:45:00", "15:45:00", "18:45:01", "21:45:01":
System.out.println("[&BNQCAAA=] Inquestur Golem Mark II startet in 15 Minuten");
synth();
break;

case "13:37:15":
frame = new Frame();

break;

}

}

private static void synth() throws MidiUnavailableException, InvalidMidiDataException, InterruptedException {

Synthesizer synth = MidiSystem.getSynthesizer();
synth.open();
Receiver rcvr = synth.getReceiver();
ShortMessage msg = new ShortMessage();
msg.setMessage(ShortMessage.NOTE_ON, 0, 30, 30);
rcvr.send(msg, -1);
Thread.sleep(100);
msg.setMessage(ShortMessage.NOTE_OFF, 0, 40, 0);
msg.setMessage(ShortMessage.NOTE_ON, 0, 40, 40);
rcvr.send(msg, -1);
Thread.sleep(200);
msg.setMessage(ShortMessage.NOTE_OFF, 0, 40, 0);
msg.setMessage(ShortMessage.NOTE_ON, 0, 50, 50);
rcvr.send(msg, -1);
Thread.sleep(300);
msg.setMessage(ShortMessage.NOTE_OFF, 0, 40, 0);
msg.setMessage(ShortMessage.NOTE_ON, 0, 60, 60);
rcvr.send(msg, -1);
Thread.sleep(400);
msg.setMessage(ShortMessage.NOTE_OFF, 0, 40, 0);
msg.setMessage(ShortMessage.NOTE_ON, 0, 80, 80);
rcvr.send(msg, -1);
Thread.sleep(500);
msg.setMessage(ShortMessage.NOTE_OFF, 0, 40, 0);
msg.setMessage(ShortMessage.NOTE_ON, 0, 90, 90);
rcvr.send(msg, -1);
Thread.sleep(4000);
msg.setMessage(ShortMessage.NOTE_OFF, 0, 40, 0);
rcvr.send(msg, -1);
synth.close();
}

private void updateStatus(String status) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.setStatus(status);
}
});
}

public static void main(String[] args) {
Application app = new Application();
app.start();

JFrame frame = new Frame();

}


}



[/CODE]
 

Kotelettklopfer

Bekanntes Mitglied
Hier die Klasse Frame.


[CODE lang="java" title="Klasse Frame"]import javax.swing.*;

public class Frame extends JFrame {

JLabel text;

public Frame() {
setVisible(true);
setSize(500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setTitle("GW2 Boss Timer");
setResizable(false);
setLayout(null);

text = new JLabel ();
text.setBounds(0,0,500,10);
add(text);


}

public void setStatus(String status) {
text.setText(status);
}
}
[/CODE]


Die App startet und die GUI wird sichtbar. Wie ich jetzt zu den vorgegebenen Zeiten den Output angezeigt bekomme weiß ich beim besten Willen noch nicht.
Ich dachte erst ich müsste hier
[CODE lang="java" highlight="2,"]case "00:45:01", "03:45:01", "06:45:00", "09:45:01", "12:45:00", "15:45:00", "18:45:01", "21:45:01":
System.out.println("[&BNQCAAA=] Inquestur Golem Mark II startet in 15 Minuten");
synth();
break;[/CODE]
anstelle des Sysout würde ich jetzt hier sowas wie Frame.setText("blablabla") erwarten.
 

Kotelettklopfer

Bekanntes Mitglied
Ach status hatte ich nicht auf dem Schirm.

1622469669739.pngJetzt öffnet er beim Start des Programms zwei leere Frames und gibt zur richtigen Zeit auch nur einen Text aus.
Erwartet hätte ich jetzt ein Fenster welches befüllt wird mit dem Text, welches man wegklickt und beim nächsten Zeitpunkt geht ein neues Fenster auf.
Ich denke mal, das geschieht in meiner Frames Klasse ?!
 
K

kneitzel

Gast
Du hast in Deiner main Methode noch ein:
Java:
        JFrame frame = new Frame();

Damit öffnest Du ein Frame und das willst Du vermutlich nicht haben. Statt dessen möchtest Du nur das andere Frame haben, welches Du in start erzeugst.

Aber Du musst auch aufpassen: Wenn das Fenster geschlossen wurde, dann ist es weg. Daher musst Du ggf. noch etwas mehr Code schreiben, damit ggf. ein neues Frame erzeugt wurde. Oder du baust es so, dass das Fenster nicht geschlossen werden kann sondern nur versteckt, denn dann könntest Du es wieder anzeigen.
 

Kotelettklopfer

Bekanntes Mitglied
Super wieder ein Stück weiter.
Habe jetzt wie du geschrieben hast, das unnötige JFrame frame = new Frame(); entfernt.

Nun kann man auf X klicken wenn der Frame verschwinden soll.

[CODE lang="java" title="Klasse Frame" highlight="4"]public Frame() {
setVisible(true);
setSize(500,300);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
setTitle("GW2 Boss Timer");
setResizable(false);
setLayout(null);[/CODE]


Und bei jedem richtigen Output komm nun der frame wieder nach vorne.

[CODE lang="java" title="Klasse Applikation" highlight="4"]case "00:15:00", "03:15:00", "06:15:00", "09:15:00", "12:15:00", "15:15:00", "18:15:00", "21:15:00":
System.out.println("[&BLEAAAA=] Modniir Ulgoth startet in 15 Minuten");
synth();
frame.setVisible(true);
break;[/CODE]


Jetzt fehlt noch nen Button der mir das Programm schließt, aber denke das wird etwas einfacher :)

Danke Euch
 

Kotelettklopfer

Bekanntes Mitglied
Jetzt habe ich es soweit fertig und muss feststellen das Intelij doch nicht so geil ist wie ich dachte.
In Eclipse kann ich einfach eine executable jar exportieren.
Hier scheinbar nicht..oder ich bin warscheinlich zu dumm :) Wenn ich es so versuche wie es im Netz steht kommt eine xml heraus mit Endung jar.
Es bleibt aber eine xml..

Habe den Code in Eclipse kopiert (dachte ich sei ein Fuchs) tja... Multi case wird nicht unterstützt sagt er mir.

Was ein downer gerade...
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben