Spanish Problema al finalizar un comando en consola de linux(raspberry)

lukaz612

New Member
Hola, estoy desarrollando una interfaz para comunicarme desde un celular a una raspberry mediante wifi, hasta ahora me descargue los ejemplos de simplechat, el problema es que quiero ejecutar un comando en la consola de linux, en realidad si se ejecuta (video) pero ya luego el programa de b4j se cierra, ya he hecho por separado ejecutar aplicaciones con la consola, sin embargo aquí me genera el siguiente error al finalizar el vídeo.

Connected: true
main._appstart (java line: 70)
java.lang.RuntimeException: java.lang.NullPointerException
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:120)
at anywheresoftware.b4a.BA$3.run(BA.java:247)
at anywheresoftware.b4a.keywords.SimpleMessageLoop.runMessageLoop(SimpleMessageLoop.java:30)
at anywheresoftware.b4a.StandardBA.startMessageLoop(StandardBA.java:26)
at anywheresoftware.b4a.keywords.Common.StartMessageLoop(Common.java:153)
at b4j.example.main._appstart(main.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:91)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:78)
at b4j.example.main.main(main.java:30)
Caused by: java.lang.NullPointerException
at anywheresoftware.b4j.object.WebSocket.access$0(WebSocket.java:134)
at anywheresoftware.b4j.object.WebSocket$JQueryElement.RunMethod(WebSocket.java:195)
at anywheresoftware.b4j.object.WebSocket$JQueryElement.SetText(WebSocket.java:246)
at b4j.example.main$ResumableSub_NewMessage.resume(main.java:120)
at b4j.example.main._newmessage(main.java:76)
at b4j.example.connector._client_messagearrived(connector.java:83)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:91)
... 12 more
Gracias :):)(no encontre la manera de como subir los .zip de mi trabajo para informacion) les dejo mi codigo en java

//main
B4X:
'Non-UI application (console / server application)
#Region Project Attributes
    #CommandLineArgs:
    #MergeLibraries: True
#End Region

#If JAVA
import java.io.BufferedReader;
import java.io.InputStreamReader;

//Execute a command AND capture the output In a String
//Parameter: Command To run
//Returns: String with the command output
public static String ExecuteCommand(String command) {
 
    StringBuffer output = new StringBuffer();
 
    Process p;
    try
    {
        p = Runtime.getRuntime().exec(command);
        p.waitFor();
        BufferedReader reader =
            new BufferedReader(new InputStreamReader(p.getInputStream()));
             String line = "";           
            while ((line = reader.readLine())!= null)
            {
                output.append(line + "\n");
            }
 
    }
    catch (Exception e)
    {
        //e.printStackTrace();
        return "Error executing command " + command;
    }
 
    //System.out.println(output);
    return output.toString();
}

#End If
Sub Process_Globals
    'Private fx As JFX
    'Public MainForm As Form
'    Private btnConnect As Button
    'Private btnSend As Button
'    Private Label1 As Label
    'Private lstUsers As ListView
'    Private txtHost As TextField
'    Private txtLogs As TextArea
    'Private txtMessage As TextField
    Type Message (Body As String, From As String)
'    Private txtName As TextField
    Private DirData As String
'    Private palabra As String
    Public joInlineJava As JavaObject = Me
    Private consoleoutput As JQueryElement

End Sub

Sub AppStart (Args() As String)
    DirData=File.DirData("controladorjava")
    Connector.ConnectTo("192.168.1.64", "ServidorJava")
    StartMessageLoop
End Sub

'Return true to allow the default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
    Return True
End Sub

Public Sub NewMessage(msg As Message)
    'txtLogs.Text = txtLogs.Text & $"${msg.From}: ${msg.Body}"$ & CRLF
    'txtLogs.SetSelection(txtLogs.Text.Length, txtLogs.Text.Length)
    
    If msg.Body = "1" Then
    
        Dim cmd As String
        cmd = "omxplayer /home/pi/Desktop/pregunta1.mp4"
        Dim Res As String = joInlineJava.RunMethod("ExecuteCommand",Array(cmd))
        consoleoutput.SetText(Res)
    '    Dim palabra As String = "a" sirve para enviar la pabra o el estrig que se desea
    '    Connector.SendMessage(palabra) enviar palabra   
    Sleep(5000)
        StopMessageLoop
    End If
    
    If msg.Body = "2" Then
        Dim cmd As String
        cmd = "omxplayer /home/pi/Desktop/pregunta2.mp4"
        Dim Res As String = joInlineJava.RunMethod("ExecuteCommand",Array(cmd))
        consoleoutput.SetText(Res)
    End If
    
    If msg.Body = "3" Then
        'Dim cmd As String
        'cmd = "omxplayer /home/pi/Desktop/pregunta3.avi"
        'Dim Res As String = joInlineJava.RunMethod("ExecuteCommand",Array(cmd))
        'consoleoutput.SetText(Res)
        
        Dim shl As Shell
        Dim cmd As String = "omxplayer /home/pi/Desktop/pregunta3.avi"
        shl.Initialize("shl","omxplayer /home/pi/Desktop/pregunta3.avi",Array(cmd))
        shl.Run(10000)
    End If
End Sub

Sub txtMessage_Action
    'btnSend_Action
End Sub

Public Sub NewUsers(Users As List)
    'stUsers.Items.Clear
    'For Each u As String In Users
    '    lstUsers.Items.Add(u)
'    Next
End Sub
//conector
B4X:
Public Sub ConnectTo(Host As String, Name As String)
    Disconnect
    currentName = Name
    client.Initialize("client", $"tcp://${Host}:${port}"$, "desktop" & Rnd(1, 10000000))
    Dim mo As MqttConnectOptions
    mo.Initialize("", "")
    mo.SetLastWill("all/disconnect", serializator.ConvertObjectToBytes(currentName), 0, False)
    client.Connect2(mo)
End Sub

Private Sub client_Connected (Success As Boolean)
    Log($"Connected: ${Success}"$)
    If Success Then
        connected = True
        client.Subscribe("all/#", 0)
        client.Publish2("all/connect", serializator.ConvertObjectToBytes(currentName), 0, False)
    Else
    '    fx.Msgbox(Main.MainForm, "Error connecting: " & LastException, "")
    End If
End Sub

Private Sub client_MessageArrived (Topic As String, Payload() As Byte)
    Dim receivedObject As Object = serializator.ConvertBytesToObject(Payload)
    If Topic = "all/connect" Or Topic = "all/disconnect" Then
        'new client has connected or disconnected
        'do nothing. The server will handle it.
    Else if Topic = "all/users" Then
        Dim newUsers As List = receivedObject
        Main.NewUsers(newUsers)
    Else
        Dim m As Message = receivedObject
        Main.NewMessage(m)
    End If
        
End Sub

Public Sub SendMessage(Body As String)
    If connected Then
        client.Publish2("all", CreateMessage(Body), 0, False)
    End If
End Sub

Public Sub Disconnect
    If connected Then
        connected = False
        client.Publish2("all/disconnect", serializator.ConvertObjectToBytes(currentName), 0, False)
        client.Close
    End If
End Sub

Private Sub CreateMessage(Body As String) As Byte()
    Dim m As Message
    m.Initialize
    m.Body = Body
    m.From = currentName
    Return serializator.ConvertObjectToBytes(m)
End Sub

Private Sub client_Disconnected
    If connected Then
    End If
    connected = False
End Sub


Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
    Return True
End Sub

Sub Service_Destroy

End Sub
 

lukaz612

New Member
aqui les dejo los archivos por si me quieren ayudar, en si estoy trabajando con un moden y me conecto vía wifi, todo en el mismo segmento no encuentro el problema porque utilizo ese mismo método en otro programa y no me genera esos errores.
 

Attachments

Top