Java-Version (ME, SE) erkennen und darauf reagieren?

Kukulkan

Mitglied
Hallo,

ich bin neu im Forum und und auch noch JAVA Neuling (Umsteiger von PHP). Hier gleich meine erste Frage:

Ich programmiere gerade ein paar Klassen, welche ich anderen Entwicklern später evtl. zur Verfügung stellen möchte. Das ganze soll unter JavaME als auch JavaSE (1.6) funktionieren. Ich achte darauf, dass ich alle Funktionen, welche unter JavaME nicht zur Verfügung stehen, in separate Klassen auslagere.

Ich frage mich nun, ob ich den Code so gestalten kann, dass ich unter JavaME andere Funktionen verwende als unter zB JavaSE 1.6. Das Ziel wäre es, die selben Dateien für die Entwicklung unter JavaME und JavaSE zu verwenden. Geht das überhaupt? Wenn ja, wie kann ich das im Code feststellen und dann entsprechend verzweigen (zB Swing-Messagebox nur unter JavaSE, unter JavaME dann eben eine Ausgabe über System.out...).

Grüße,

Kukulkan
 

The_S

Top Contributor
Nein, geht nicht. Auch deine Java SE Klassen würden sich ja zur Ausführungszeit im Classpath befinden, würden also mit geladen werden bevor du überhaupt prüfen kannst, ob es sich um eine ME oder eine SE Umgebung handelt. Du könntest zwar ein bisschen tricksen, aber das funktioniert nur bei den wenigsten ME Geräten. Außerdem müsste das Ganze ja auch irgendwie einheitlich kompiliert werden.

Einzige Möglichkeit wäre ein Build-Tool wie bspw. Ant, mit welchem du aus deinem Code unterschiedliche Versionen für ME und SE generieren lassen kannst.
 

mvitz

Top Contributor
Oder aber man baut insgesamt 3 Libraries:

1. Alle Klassen, die unter SE und ME laufen
2. Nur die Klassen, welche SE spezielle Dinge an JavaSE deligieren
3. Nur die Klassen, welche diese Dinge für ME implementieren.

Dann muss man halt je nachdem für welche Plattform man deployt sich zwischen 2 oder 3 entscheiden.
 

The_S

Top Contributor
Es geht schon. Man nutzt ein Interface und verschiedene Implementierungen. Diese muss man dann je nach Plattform passend per Reflection nachladen. Dann (und nur dann) werden die Klassen nicht automatisch geladen und man könnte es so machen.

PlatformSupportUtils.java - lycia - Project Hosting on Google Code
PlatformFactoryProvider.java - lycia - Project Hosting on Google Code

Z.B. mit 2 solchen Klassen.

Und wie machste das bei Java ME (darum gehts hier ja, nicht um Android)?
 

Kukulkan

Mitglied
Hallo,

danke für die Antworten und Vorschläge. In manchen anderen Programmiersprachen gibt es Compiler-Direktiven. Da kann man im Source sowas machen (Beispiel, Schematisch):

Java:
String VersionsKonstante = "JavaSE"
CompilerIf (VersionsKonstante = "JavaME") {
  // some JavaME code
  private int testCode() {
  }
}

CompilerIf (VersionsKonstante = "JavaSE") {
  // some JavaSE code
  private int testCode() {
  }
}
Dann setzt man vor der Erstellung/Compilierung einfach die Konstante auf den richtigen Wert und das Compilat ist dann entsprechend. VersionsKonstante kann auch was aus den Projekt-Properties sein oder so... Einen ähnlichen Ansatz habe ich mir erhofft :(

Es wurde ANT erwähnt. Wie kann ich da am besten reinfinden? Gibt es einen guten, einführenden Link?

Grüße,

Kukulkan
 

Noctarius

Top Contributor
Nein direkt gibt es sowas in Java nicht, da die JRE beim Laden einer Klasse alle benötigten (aber noch nicht geladenen) Klassen mitläd. Findet er dabei eine Klasse nicht gibt es eben eine ClassNotFoundException.

Einen Preprozessor gibt es in Java zum Glück nicht aber du kannst halt mit der oben erwähnten Variante trotzdem passende Implementierungen eines Interfaces laden.
 

Kukulkan

Mitglied
Hallo,

Hm. Was wäre denn jetzt der ideale Weg? Soll ich mich in ANT einarbeiten oder mich mit Reflection befassen (nicht vergessen, bin noch recht neu in Java)?

Ich will keinesfalls einen Source-Split für JavaME oder JavaSE. Das würde bedeuten, dass ich jede Änderung immer in mehreren Sourcen durchführen müsste... Ich implementiere eine Art SDK für ein spezielles Protokoll. Das sollen Entwickler unter JavaME und JavaSE anwenden und einbinden können. Auch will ich am besten nur einen Source rausgeben (egal, ob der Anwender dann etwas für JavaME oder JavaSE erstellen möchte).

Das Problem ist, das manche Funktionen in den Klassen ja schon in Eclipse Probleme machen, nur weil Sie da sind (auch wenn Sie nicht aufgerufen würden).

Kukulkan
 

The_S

Top Contributor
Hm. Was wäre denn jetzt der ideale Weg? Soll ich mich in ANT einarbeiten oder mich mit Reflection befassen (nicht vergessen, bin noch recht neu in Java)?

Ich würde wie gesagt Ant nehmen. Je nach Anforderung kannst du auch überlegen, ob du die Logik auf einen Server auslagerst und dann via HTTP-Requests, WebServices, ... nur noch die GUI auf den jeweiligen Endgeräten befüllst. Das ist eigentlich ein recht gebräuchlicher weg, wenn man für unterschiedliche Plattformen entwickeln will. Wenn ich mir den Rest deines Beitrages ansehe, ist diese Variante aber vermutlich nichts für dich.

Ich will keinesfalls einen Source-Split für JavaME oder JavaSE. Das würde bedeuten, dass ich jede Änderung immer in mehreren Sourcen durchführen müsste...

ANT oder sowas in die Richtung ;) . Im ME bzw. SE spezifischen Teil wirst du aber um einen "Source-Split" nicht herum kommen.

Das sollen Entwickler unter JavaME und JavaSE anwenden und einbinden können. Auch will ich am besten nur einen Source rausgeben (egal, ob der Anwender dann etwas für JavaME oder JavaSE erstellen möchte).

Dann aber auch mit Skript zum Builden. Ein Source - OK. Aber um unterschiedliche Bin-Files für die unterschiedlichen Plattformen wirst du nicht kommen.
 

Noctarius

Top Contributor
Jo das CLDC kannte ich auch. Dachte da wäre es auch schon drin gewesen. Wie gesagt noch nie wirklich mit J2ME gearbeitet, ergo ziehe ich den Vorschlag über Reflection zu arbeiten zurück, S hat gewonnen :p
 

Landei

Top Contributor
Um in "normale" Umgebungen je nach Konfiguration unterschiedliche Implementierungen eines Interfaces zu laden würde sich das Service Provider Interface anbieten, aber das hat J2ME wahrscheinlich auch wieder nicht.
 

Bierhumpen

Bekanntes Mitglied
@Kukulkan: Mein Tipp: lass es. Das ist unnötige Arbeit. JavaME hat praktisch Null bedeutung mehr auf dem Mobilmarkt und wird in den nächsten Monaten noch weiter sinken. Das Unterfangen kannst du dir also guten Gewissens sparen ;-)
 

Noctarius

Top Contributor
Joar so kann man es auch sehen. Aber J2ME wird ja nicht nur im Bereich Mobilfunk genutzt, sondern auch bei Auto-Onboard-Computern, BD+, ...

Und auch bei anderen Plattformen wie Android muss man gewisse Dinge beachten / anders machen
 

The_S

Top Contributor
@Kukulkan: Mein Tipp: lass es. Das ist unnötige Arbeit. JavaME hat praktisch Null bedeutung mehr auf dem Mobilmarkt und wird in den nächsten Monaten noch weiter sinken. Das Unterfangen kannst du dir also guten Gewissens sparen ;-)

Auch wenn es dir merkwürdig vorkommen mag: Die wenigsten Leute, die ich kenne (vor allem aus dem Nicht-IT/Technik-Bereich), haben ein Android/Bada-Handy oder iPhone und diese planen auch nicht, sich in nächster Zeit eines anzuschaffen. Da bleibt nur Java ME.
 

Kukulkan

Mitglied
Hallo,

es ist so, dass ich eine Art SDK für unser Protokoll bereitstellen möchte. Das soll dann auf dem BlackBerry, auf Android und auf Desktops/Servern eingesetzt werden. Während ich auf Desktops/Servern problemlos auf JavaSE setzen kann, muss ich auf den mobilen Geräten (also Android und BB) auf JavaME setzen. Da habe ich die grösste Chance, dass es machbar ist. Auf JAVA zu verzichten scheint mir da kein guter Vorsatz zu sein. Wie sonst soll ich denn eine gemeinsame Codebasis für mehrere mobile Devices schaffen? Ich hoffe ja, dass Oracle es schafft MS davon zu überzeugen unter Windows Mobile 7 auch JAVA zu unterstützen. :pfeif:

Ich habe vor, zumindest für die JAVA fähigen Geräte, auf eine gemeinsame Code-Basis zuzugreifen. Und deshalb die Idee, evtl. durch geschickte Programmierung, Includes, Direktiven. Reflection etc. weitere Sourcecodes und Aufwände zu reduzieren.

Grüße,

Kukulkan
 

homer65

Top Contributor
Bin mir nicht 100 prozentig sicher, aber hilft System.getProperties() nicht weiter?

Edit:
Habe noch mal genauer geguckt.
Code:
System.getProperty("os.name");
gibt den Namen des Betriebssystems. Das müßte doch als Entscheidungskriterium ausreichen.
 
Zuletzt bearbeitet:

The_S

Top Contributor
Es geht um grundsätzlich unterschiedliche Plattformen - SE, ME und Android. Da werden ganz unterschiedliche Code-Grundlagen benötigt die man nicht erst zur Runtime unterscheiden darf/kann (zumindest bei ME).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Neue Java v8 JRE Version nicht über alte drüber installierbar: Wie sonst? Java Basics - Anfänger-Themen 7
M Java Version Verständnisfrage Java Basics - Anfänger-Themen 16
J Welche Java-Version installieren Java Basics - Anfänger-Themen 9
pkm Eclipse wie mit anderer JAVA-Version starten? Java Basics - Anfänger-Themen 1
U duplicate entry: Version.java.template Java Basics - Anfänger-Themen 0
I Richtige Java-Version finden? Java Basics - Anfänger-Themen 17
A Erste Schritte Programm in Shell mit bestimmter Java-Version aufrufen Java Basics - Anfänger-Themen 10
B Netbeans Java Version 8.0.2 und Yosemite Java Basics - Anfänger-Themen 1
G Welche Java-Version auf meinem Rechner? Java Basics - Anfänger-Themen 2
H java version updaten Java Basics - Anfänger-Themen 11
K Welche Java Version ist die richtige Java Basics - Anfänger-Themen 3
M System.getProperty("java.vm.version") liefert build-Version Java Basics - Anfänger-Themen 4
M Java 64 bit version funktoniert nicht bei win 64 bit Java Basics - Anfänger-Themen 6
J Kompilieren in anderern Java-Version? Java Basics - Anfänger-Themen 15
K JDK-Version einer kompilierten Java-Klasse? Java Basics - Anfänger-Themen 6
agent47 Java Version vergleichen Java Basics - Anfänger-Themen 6
G Java Version steuern Java Basics - Anfänger-Themen 12
R Java Version herausfinden..? Java Basics - Anfänger-Themen 1
X Java Eclipse Version: 3.4.1 meldet manchmal keine Fehler Java Basics - Anfänger-Themen 17
G java version umstellen von 1.4 auf 1.6 unter linux Java Basics - Anfänger-Themen 4
J Wie in Windows Installation und Version von Java ermitteln? Java Basics - Anfänger-Themen 2
mwildam Welche Java-Version (SE oder EE)? Java Basics - Anfänger-Themen 9
D Java-Version anzeigen lassen Java Basics - Anfänger-Themen 4
G Mailversand mit Java in der Version 1.3? Java Basics - Anfänger-Themen 2
H java.lang.UnsupportedClassVersionError: Bad version number Java Basics - Anfänger-Themen 2
M java version auslesen Java Basics - Anfänger-Themen 3
K Anwendung mit anderer Java-Version Starten Java Basics - Anfänger-Themen 9
H Java Version 5.0 Java Basics - Anfänger-Themen 6
F java version prüfen Java Basics - Anfänger-Themen 9
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben