B4J Question List of Java processes

Firpas

Active Member
Licensed User
Longtime User
OOpsss…

I am trying this code:
B4X:
Private Sub CheckPid(PID As String)
    Dim JavaHome As String = GetSystemProperty("java.home", "")
    Dim Sh As Shell
    Sh.Initialize("CheckPid", File.Combine(JavaHome , "jps.exe"), Array As String("-q"))
    Sh.WorkingDirectory = JavaHome
    Sh.Run(100)
    Wait For CheckPid_ProcessCompleted (Success As Boolean, ExitCode As Int, StdOut As String, StdErr As String)
    Log(Success)
    Log(ExitCode)
    Log(StdOut)
    Log(StdErr)
End Sub

with this result

Waiting for debugger to connect...
Program started.
C:\Program Files\Java\jdk1.8.0_121\jre
false
-559038737
org.apache.commons.exec.ExecuteException: Execution failed (Exit value: -559038737. Caused by java.io.IOException: Cannot run program "C:\Program Files\Java\jdk1.8.0_121\jre\jps.exe" (in directory "C:\Program Files\Java\jdk1.8.0_121\jre"): CreateProcess error=2, El sistema no puede encontrar el archivo especificado)

Any idea
 
Upvote 0

stevel05

Expert
Licensed User
Longtime User
java.home points to the jre directory, jps is not in that directory.
 
Upvote 0

Erel

B4X founder
Staff member
Licensed User
Longtime User
B4X:
Sub AppStart (Args() As String)
   RunJPS
   StartMessageLoop
End Sub

Sub RunJPS
   Dim shl As Shell
   shl.Initialize("shl", "where.exe", Array("jps.exe"))
   shl.Run(-1)
   Wait For shl_ProcessCompleted (Success As Boolean, ExitCode As Int, StdOut As String, StdErr As String)
   If Success And ExitCode = 0 Then
       StdOut = StdOut.Trim
       shl.Initialize("shl", StdOut, Array("-l"))
       Log(StdOut)
       shl.Run(-1)
       Wait For shl_ProcessCompleted (Success As Boolean, ExitCode As Int, StdOut As String, StdErr As String)
       Log(StdOut)
   Else
       Log("error finding jps.exe")
   End If
End Sub

This will work on Windows when the jdk is in the PATH environment variable.
 
Upvote 0

Firpas

Active Member
Licensed User
Longtime User
That's right

I´ve mo
dified the code
B4X:
Private Sub CheckPid(PID As String)
    Dim JavaHome As String = GetSystemProperty("java.home", "")
    If JavaHome.IndexOf("\jdk") > -1 Then
        Dim JavaBin As String = JavaHome.Replace("\jre", "\bin")
        Dim Sh As Shell
        Sh.Initialize("CheckPid", File.Combine(JavaBin , "jps.exe"), Array As String("-q"))
        Sh.WorkingDirectory = JavaHome
        Sh.Run(100)
        Wait For CheckPid_ProcessCompleted (Success As Boolean, ExitCode As Int, StdOut As String, StdErr As String)
        Log(JavaBin)
        Log(Success)
        Log(ExitCode)
        Log(StdOut)
        Log(StdErr)
    End If
  
End Sub

And here is de result

Waiting for debugger to connect...
Program started.
C:\Program Files\Java\jdk1.8.0_121\bin
false
1
timeout

Your code result:

Waiting for debugger to connect...
Program started.
error finding jps.exe


How can i get the list or process???
 
Last edited:
Upvote 0

stevel05

Expert
Licensed User
Longtime User
The process did not complete, 100 ms is too short a time out, make it -1 to turn off the timeout.
 
Upvote 0
Top