German Jabaco nach B4J, System.getProperty("os.name")

Knoppi

Active Member
Licensed User
Longtime User
Hallo,
ich bin dabei meine alten Jabaco Programme nach B4J zu übersetzen
bis jetzt bin ich auf keine größeren Probleme gestoßen die nicht mit Hilfe des Forums zu lösen wahren.
Dafür schon mal vielen Dank.

Jetzt komme ich aber nicht weiter.

In Jabaco ist es möglich Java Befehle direkt aufzurufen
mein bisheriger Jabaco Code:
B4X:
Public Function GetOS As String
  Dim os As String = ""
  os = System.getProperty("os.name")
  GetOS = os
End Function

kann mir jemand sagen wie ich das in B4J machen kann?

desweiteren brauche ich auch noch eine Lösung für file.separator

viele Grüße
Knoppi
 
Last edited:

DonManfred

Expert
Licensed User
Longtime User
Für System.getProperty könntest Du vermutlich diese Lib benutzen.
Was macht file.seperator?

Nach ein bisschen google würde ich sagen, das der file.seperator halt der backslash ("\") in Windowssystemen und slash ("/") in Linuxsystemen ist. Android basiert auf Linux und hat daher ebenfalls immer den slash... Um das in Android rauszufinden braucht´s keinen file.seperator
 
Last edited:

Knoppi

Active Member
Licensed User
Longtime User
@DonManfred

Diese Lib habe ich auch gefunden, ist aber nur für Android B4A.
Mein Programm läuft aber auf WinXP, Win7, Ubuntu und Alpine Linux, und soll später auch auf Andoid eingesetzt werden.

Da die verschiedenen OS sehr unterschiedliche Pfad/Directory Angaben benötigen ist es für mich wichtig das OS per Programm zu ermitteln.
(Stichwort Windows Laufwerke C:,D:,... und eben file.seperator)
 

Knoppi

Active Member
Licensed User
Longtime User
erster Teil gelöst

B4X:
'Return the OS
'(Referenced Lib: JavaObject)
Public Sub getOS As String
    Dim sys As JavaObject
    Dim os As String = ""
    sys.InitializeStatic( "java.lang.System")
    os = sys.RunMethod( "getProperty", Array As Object("os.name"))

    Return os
End Sub

'Return True if the OS is Windows
Sub isWindows As Boolean
    Dim sys As JavaObject
    Dim os As String = ""
    sys.InitializeStatic("java.lang.System")
    os = sys.RunMethod( "getProperty", Array As Object("os.name"))

    os = os.ToLowerCase
    Return  os.IndexOf( "win") > -1
End Sub

Nachtrag für andere OS
(nicht getestet)

B4X:
'Return True if the OS is Unix/Linux
Public Sub isUnix As Boolean
    Dim sys As JavaObject
    Dim os As String = ""
    sys.InitializeStatic("java.lang.System")
    os = sys.RunMethod( "getProperty", Array As Object("os.name"))

    os = os.ToLowerCase
    Return  os.IndexOf(  "nix") > -1 OR os.IndexOf(  "nux") > -1 OR os.IndexOf(  "aix") > -1
End Sub

'Return True if the OS is Mac
Public Sub isMac As Boolean
    Dim sys As JavaObject
    Dim os As String = ""
    sys.InitializeStatic("java.lang.System")
    os = sys.RunMethod( "getProperty", Array As Object("os.name"))

    os = os.ToLowerCase
    Return  os.IndexOf(  "mac") > -1
End Sub

'Return True if the OS is Solaris
Public Sub isSolaris As Boolean
    Dim sys As JavaObject
    Dim os As String = ""
    sys.InitializeStatic("java.lang.System")
    os = sys.RunMethod( "getProperty", Array As Object("os.name"))

    os = os.ToLowerCase
    Return  os.IndexOf(  "sunos") > -1
End Sub

Quelle: http://www.mkyong.com/java/how-to-detect-os-in-java-systemgetpropertyosname/


zweiter Teil auch gelöst

B4X:
Public Sub getFileSeparator As String
    Dim sys As JavaObject
    Dim os As String = ""
    sys.InitializeStatic( "java.lang.System")
    os = sys.RunMethod( "getProperty", Array As Object( "file.separator"))
   
    Return os
End Sub

viele Grüße Knoppi
 
Last edited:

Knoppi

Active Member
Licensed User
Longtime User
noch ein Nachtrag

die obigen Code Beispiele können in B4J und B4A benutzt werden auch wenn's für B4A keinen Sinn macht

in B4J kann mann auch ohne JavaObject zum Ziel kommen
B4X:
Log("GetSystemProperty: "& GetSystemProperty(  "os.name", ""))
liefert zum Beispiel
GetSystemProperty: Windows 7
 
Top