Explicação para o trecho de código que usa JNA

Olá!

Gostaria que vocês pudessem me ajudar a entender o que o seguinte trecho de código tá fazendo:

final String jnaLibraryPath = System.getProperty("jna.library.path");
    final StringBuilder newJnaLibraryPath = new StringBuilder(jnaLibraryPath != null ? (jnaLibraryPath + ":") : "");
    newJnaLibraryPath.append("/Applications/VLC.app/Contents/MacOS/lib");
    System.setProperty("jna.library.path", newJnaLibraryPath.toString());

Eu acho que isso tem algo a ver com a compatibilidade da biblioteca que tá sendo usada (VLCJ), mas não entendi muito bem. Qualquer ajuda é bem vinda.

Obrigado e boa semana :slight_smile:

Esse código tenta adicionar à propriedade jna.library.path o caminho /Applications/VLC.app/Contents/MacOS/lib

1 curtida

Boa tarde!

Que loucura, eu acho que nem existe esse diretório. No caso, seria mais pra compatibilidade com MacOS? Será que se eu remover, terei problemas?

Obrigado pela ajuda.

O jna.library.path é a propriedade que o JNA lê para obter os caminhos onde ele deve procurar quando você tentar carregar uma biblioteca nativa (arquivo .dll no Windows, arquivo .so no Linux, não sei qual extensão o Mac OS usa).

Se você não tem o diretório supracitado, então ajuste o código adicionando a pasta que contem as bibliotecas nativas do VLC.

Você copiou esse código de algum lugar?
Está realmente programando no Mac OS?

Se vai executar sua aplicação em diferentes sistemas operacionais, recomendo que altere o código pra ficar assim:

String property = "jna.library.path";
String oldValue = System.getProperty(property);
StringBuilder newValue = new StringBuilder();
if (oldValue != null) {
    newValue.append(File.pathSeparator);
}
newValue.append("/Applications/VLC.app/Contents/MacOS/lib"); // inclui esse caminho para carregar bibliotecas nativas
System.setProperty(property, newValue.toString());

Então, to tentando adaptar ele pra um player que to fazendo, então não sou eu que fiz o código, apenas adaptei ele. E eu não to desenvolvendo em Mac não, uso Linux.

Se eu usar esse trecho que você mandou, como funcionaria a compatibilidade com os SO’s? É só ir adicionando com o .append no NewValue? Sei que isso vai ser executado em Linux e Windows, Mac acho que não (mas é bom previnir)

Interessante, eu sei que o VLCj precisa ter necessariamente o VLC instalado na máquina… Acho que isso deve ter algo a ver com seu código.

Perdão reviver esse tópico, é que comecei a testar a aplicação fora da minha máquina e… parece que os Windows não tão achando naturalmente as coisas do VLC pra poder exibir o vídeo. O que posso fazer, @staroski?

Você pode fazer algo desse tipo:

final String jnaLibraryPath = System.getProperty("jna.library.path");
final StringBuilder newJnaLibraryPath = new StringBuilder(jnaLibraryPath != null ? (jnaLibraryPath + ":") : "");
if(System.getProperty("os.name").contains("Windows")){
    newJnaLibraryPath.append("C:\\Program Files\\VideoLAN\\VLC");
}else {
    newJnaLibraryPath.append("/Applications/VLC.app/Contents/MacOS/lib");
}
System.setProperty("jna.library.path", newJnaLibraryPath.toString());

Mas c sabe que se n tiver nessa localização vai dar erro e tals né?

1 curtida