[RESOLVIDO].Jar baixado do site da Gluon, não abre!

32 respostas Resolvido
C

Prezados, sou iniciante total em java e estou tentando instalar o SceneBuilder da Gluon.
Baixei o arquivo scenebuilder-kit-11.0.0.jar, porem ele não roda ao clicar duas vezes.
tentei no prompt, através de ajuda de um post daqui, mas mostra a seguinte mensagem:

" no main manifest attribute, in C:\Users\Clodoaldo\Documents\NetBeansProjects\scenebuilder-kit-11.0.0.jar "

Detalhe: instalei o jdk 12 e o Netbeans 11.
Estou seguindo o “curso em video”
alguem pode ajudar um iniciante perdido?!?!?
abraços

32 Respostas

j-menezes

Não é o kit que você tem que baixar para rodar.
Na versão 11 a gluon retirou o executavel Jar, então você precisa baixar de acordo com seu sistema operacional.

staroski

Esse JAR não possui um MANIFEST.MF que indique a classe main, então não é um JAR executável.

C

Obrigado staroski!!!
E como faço para ver o que tem nele?
como disse baixei do site da gluon!!!
abraço!

C

j-menezes, valeu!!! Eu baixei e instalei antes a versão para windows 64b, aí como estou “mais que perdido” em javafx e scenebuilder no netbeans baixei esse kit imaginando que pudesse me ajudar e tinha documentação…aí aumentaram meus problemas…rs
Vc acha que para um iniciante é melhor eu esquecer esse kit?
O que tem nele?

desculpe a longa história!

j-menezes

Esquecer o kit !? isso sempre depende do que deseja fazer.
Se pretende apenas desenhar as telas no sceneBuilder, sim esqueça o kit.

C

Estou aprendendo agora , mas minha intenção é desenhar as telas no sceneBuilder junto com o Netbeans!

j-menezes

Voce desenha a tela dentro do SceneBuilder, mas claro que poderá fazer a tela por codigo sem o SceneBuilder.
Uma vez desenhada a tela no SceneBuilder, dentro do programa javaFX você chama essa tela desenhada atraves da extensão fxml.E pronto.

C

j-menezes, agora entendi um pouco e parece facil de fazer, mas não pra mim ainda, que
nem teria ideía de como chamar essa tela!

pelo que vi no curso em video, do java para iniciantes, se eu criasse uma aplicação fx, o netbeans mesmo criaria a pasta controller e fxml, mas com essa versão que tenho não faz isso!
Estou usando o netbeans 11 e jdk12

mais uma vez, obrigado pela paciencia !

j-menezes

E’ realmente bem simples, basta seguir a receitinha.

(no netbeans 11 e jdk 12 voce deve criar um projeto modular)
1.New Project
1.1 Java with Ant
1.1.1 Java Modular Project

Obs : ( No Projeto com o botao direito do mouse ) Properties / Libraries / Compile / Module Path [+] (Add jar / folder) <-- uma forma apenas

exemplo veja se tudo esta dentro desse diretorio
javafx-sdk-12.0.1/lib
javafx.base.jar // essa
javafx.controls.jar // supondo que usara essa
javafx.fxml.jar // supondo que usara essa
javafx.graphics.jar // supondo que usara essa
javafx.media.jar
javafx.swing.jar
javafx-swt.jar
javafx.web.jar

Dentro do Projeto
2 New Module ( Com o botao direito do mouse )
2.1 vou dar uma nome para teste meuModulo
2.2 procure por module-info.java // meuModulo – classes – default package
module-info.java
2.3 dentro dele coloca

module meuModulo {
    requires javafx.controls;
    requires javafx.fxml;
    requires javafx.graphics;
    
    exports meutest.com;   // sao os packages do seu modulo que serão visiveis 

    opens meutest.com to javafx.fxml;  // se for alterar propriedades  dos componentes 
}

3.Quando voce cria um modulo no netbeans 11, ele não esta aparecendo a opçao
New File --> Empty FXML
então nesse caso você simplesmente abre o SceneBuilder e cria o seu FXML e Save As dentro da pasta do projeto meutest com de maneira que no netbeans apareça
–> meutest.com
-----> minhaTela.fxml // escolha o nome que quiser

4.agora chegamos no ponto que você queria saber, porem trabalhar com modulos no java 11 e superior é um pouco deferente, e tem muitas vantagens.

(Agora toda vez que for mudar a tela usa botao direito do mouse --> Open ou edit para alterar alguma coisa na mão dentro do FXML)
A opção Make Controller // botao direito do mouse, criará um arquivo java para controlar essa tela em questão e liga-la com seus programas.

  1. Resta apenas saber como chamar esse controller

    package meutest.com;
    
         import javafx.application.Application;
         import javafx.fxml.FXMLLoader;
         import javafx.scene.Parent;
         import javafx.scene.Scene;
         import javafx.scene.image.ImageView;
         import javafx.scene.layout.StackPane;
         import javafx.stage.Stage;
    
    
         public class TelaFXML extends Application {
             
    
             @Override
             public void start(Stage stage) throws Exception {
                 stage.setTitle("Test FXML");
                 
                 
                 FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("minhaTela.fxml"));
                 Parent parent = (Parent)fxmlLoader.load();
    
               // O nome do programa Tela1Controller, foi Make Controller do netbeans quem deu e criou o programa
                 MinhaTelaController telacontroller = fxmlLoader.getController();
    
                 Scene scene = new Scene(parent); 
                 stage.setScene(scene);
                  
                 stage.show(); 
             }
             
             
             public static void main(String[] args) {
                launch(args);
             }
         }
    
C

Estou tentando seguir sua receita, mas não entendi essa parte:

1)Como eu crio o “meutest.com”???

2)Eu criei um projeto modular com o nome OlaFx_Menezes e criei uma tela no Scene, em que pasta salvo o fxml?
Olha como está:
image

j-menezes

no netbeans basta criar um New package (Botao direito do mouse) no seu projeto

C

Já tentei colocar ele em todos os lugares! O erro não some!
olha só:

j-menezes

esse erro vai sumir assim que voce dar o make controller e ele irá criar um programa java ou mesmo voce criar ou colocar qualquer programa java no package.

C

Putz!!! Criei um arquivo do tipo Java Class, e coloquei o nome do pacote "meutest.com e o erro sumiu mesmo!!!
Perdi a manhã toda tentando corrigir!!! (bicho é bicho…kkkk)

Mas agora não entendi como fazer esse “Make Controller”.

E como criar o arquivo main, pq deu errado!

j-menezes

Bom !!! para usar o make Controller, clica com o botao direito do mouse sobre o minhaTela.fxml
E para criar um main ai dentro do package meutest.com, novamente com o botao direito em cima dele e new Java Class, entao basta colar o exemplo que postei.

C

Agora SIMM!!!
Finalmente apareceu a tela, pelo netbeans!!!
Muuuito obrigado pela paciencia!!!

Sempre devo colar esse seu exemplo na main ??? O controller fica vazio só com o package e public class???
Mas e para editar a tela e fazer as modificaçoes???

j-menezes

Não , não, Eu apenas enviei um exemplo de como se faz.
Em relação ao Controller estar vazio, a medida que voce for populando suas telas dar um nome para os componentes, criar eventos tudo dentro do sceneBuilder, voce usará novamente o make Controller aparecerá tudo dentro do programa MinhaTelaController.

Para modificar a tela vale o que eu expliquei logo lá no inicio; botao direito do mouse sobre minhaTela.fxml e Open. Depois de alterar Salva e no netbeans chama de novo make controller.

C

Vou tentar, mas por hoje já te perturbei demais!!!
muito obrigado mesmo!!!

C

j-menezes, desculpe te encher mais uma vez, porém, Montando o seu exemplo só tentei colocar um label e um botão, seguindo um video do descompila, que fica tudo igualzinho mas olha o erro que dá:

O detalhe é que, basta eu colocar um fx:id no botão, la no Scene que dá o erro

é mais um erro de novato???

j-menezes

1.Na minhaTela.fxml (Botao direito do mouse opcao Open)
2.Dentro do SceneBuilder clique no item que voce deseja e no lado direito selecione Code
3.na linha fx:id coloca um nome para essa variavel
4.Save <— nesse caso nao precisa ser Save As, isso porque ele vai salvar em cima do minhaTela.fxml que foi aberto
5. de volta no NetBeans
6. Na minhaTela.fxml (Botao direito do mouse opcao Make Controller)
7. Pronto, veja que dentro do MinhaTelaController.java aparecerá @FXML e logo abaixo o nome da variavel que você criou lá no SceneBuilder

C

Foi assim mesmo que eu fiz ontem! ( Umas 500 vezes…kkk)
Mas o erro continua!
Cheguei a pensar que poderia ser algum erro de vínculo entre o Scene e o NetBeans. Reparei o NetBeans, mas nada!
Alguma ideia?

j-menezes

Tenta criar outra tela fxml la no sceneBuilder coloca o nome nos componentes, fx:id, tem que clicar no componente que quer colocar o nome. depois lá no NetBeans usa Make Controller e veja se está gerando o @FXML.
Outra coisa, essa linha que está aparecendo com erro na MinhaTelaController.java apaga ela e usa o Make Controller novamente. E certifique que ao salvar lá no sceneBuilder se ele esta’ salvando corretamente no seu projeto dentro do netBeans.

Java para esse tipo de coisa é bem estável em todas as plataformas.

C

Ainda nada!!! Não sei o que há!
Fiz tudo novamente ( criei o programa do zero) e segui seus passos, mas a lista do erro é o mesmo.
O interessante é que quando faz o “Build eClean” não dá erro nenhum! ele compila normal!
Só na hora de executar é que dá o erro!
olha a lista (

< html> Exception in Application start method
java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application start method
	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
	at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: javafx.fxml.LoadException: 
/C:/Users/Clodoaldo/Documents/NetBeansProjects/FxMenezes/build/modules/meuModulo/meutest/com/minhaTela.fxml:12

	at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2625)
	at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2603)
	at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466)
	at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435)
	at meuModulo/meutest.com.MeuMain.start(MeuMain.java:18)
	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
	at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
	... 1 more
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private javafx.scene.control.Label meutest.com.MinhaTelaController.lblMensagem accessible: module meuModulo does not "opens meutest.com" to module javafx.fxml
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:341)
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:281)
	at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:176)
	at java.base/java.lang.reflect.Field.setAccessible(Field.java:170)
	at javafx.fxml/javafx.fxml.FXMLLoader$ControllerAccessor.addAccessibleFields(FXMLLoader.java:3479)
	at javafx.fxml/javafx.fxml.FXMLLoader$ControllerAccessor$1.run(FXMLLoader.java:3444)
	at javafx.fxml/javafx.fxml.FXMLLoader$ControllerAccessor$1.run(FXMLLoader.java:3440)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:310)
	at javafx.fxml/javafx.fxml.FXMLLoader$ControllerAccessor.addAccessibleMembers(FXMLLoader.java:3439)
	at javafx.fxml/javafx.fxml.FXMLLoader$ControllerAccessor.getControllerFields(FXMLLoader.java:3378)
	at javafx.fxml/javafx.fxml.FXMLLoader.injectFields(FXMLLoader.java:1170)
	at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processValue(FXMLLoader.java:865)
	at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:759)
	at javafx.fxml/javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2722)
	at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2552)
	... 12 more
Exception running application meutest.com.MeuMain
C:\Users\Clodoaldo\AppData\Local\NetBeans\Cache\11.0\executor-snippets\run.xml:111: The following error occurred while executing this line:
C:\Users\Clodoaldo\AppData\Local\NetBeans\Cache\11.0\executor-snippets\run.xml:40: Java returned: 1
BUILD FAILED (total time: 2 seconds)
</html>

Detalhe: Antes da erro no minhaTela.fxml de tamanho da fonte, aí coloquei um label e button padarão, sem mudar nada, só mudei o fx:id…aí aparece o erro!

package meutest.com;

import javafx.application.Application;
 import javafx.fxml.FXMLLoader;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.scene.image.ImageView;
 import javafx.scene.layout.StackPane;
 import javafx.stage.Stage;

 public class MeuMain extends Application {
  
     @Override
     public void start(Stage stage) throws Exception {
         stage.setTitle("Test FXML");
                    
         FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("minhaTela.fxml"));
         Parent parent = (Parent)fxmlLoader.load();

       // O nome do programa Tela1Controller, foi Make Controller do netbeans quem deu e criou o programa
         MinhaTelaController  telacontroller = fxmlLoader.getController(); //MeuMakeController

         Scene scene = new Scene(parent); 
         stage.setScene(scene);
        stage.show(); 
     }
              
     public static void main(String[] args) {
        launch(args);
     }
 }

O Controller:

ackage meutest.com;

import java.net.URL;

import java.util.ResourceBundle;

import javafx.event.ActionEvent;

import javafx.fxml.FXML;

import javafx.fxml.Initializable;

import javafx.scene.control.Button;

import javafx.scene.control.Label;

public class MinhaTelaController implements Initializable {

@FXML
private Label lblMensagem;

// private Button btnClique; // <==== ISTO CAUSA O PROBLEMA
@FXML
private Button btnBotao;

@Override
public void initialize(URL url, ResourceBundle rb) {
 }    

private void clicouBotao(ActionEvent event) {
    lblMensagem.setText("OLá Mundo");
 
}

}

e o FXML

> >
> <?xml version="1.0" encoding="UTF-8"?>
> 
> <?import javafx.scene.control.Button?>
> <?import javafx.scene.control.Label?>
> <?import javafx.scene.layout.AnchorPane?>
> <?import javafx.scene.layout.VBox?>
> 
> <VBox prefHeight="400.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="meutest.com.MinhaTelaController">
>   <children>
>     <AnchorPane maxHeight="-1.0" maxWidth="-1.0" prefHeight="-1.0" prefWidth="-1.0" VBox.vgrow="ALWAYS">
>          <children>
>             <Label fx:id="lblMensagem" layoutX="285.0" layoutY="79.0" text="Label" />
>             <Button fx:id="btnBotao" layoutX="273.0" layoutY="194.0" mnemonicParsing="false" text="Button" />
>          </children>
>     </AnchorPane>
>   </children>
> </VBox>
j-menezes

Veja se nesse endereco /C:/Users/Clodoaldo/Documents/NetBeansProjects/FxMenezes/build/modules/meuModulo/meutest/com contem mesmo o arquivo minhaTela.fxml

Se estiver lá coloca essa linha no modulo-info.java

opens meutest.com to javafx.fxml;

C

O caminho é este mesmo, só não está em ingles!!
Inclui a linha que vc disse, mas ainda não roda!!! :frowning:

Mais estranho ainda :
 Segui o passo a passo deste video: 
https://www.youtube.com/watch?v=Bk42DbVBzXM
E funcionou normal, mesmo quando coloco os fx:id dos componentes
 que ele não é modular , como o seu! tem muita diferença?
j-menezes

Sim, tem diferença. O modular voce tem uma jvm do tamanho necessario e somente tem as classes que necessita.Alem das permissões de visibilidade de alguns módulos que o torna ainda mais seguro.
Isso resulta em menor uso de memoria e por consequência fica mais rapido.
A nivel de exemplo, tenho aqui uma jvm de mais de 200 mega normal e quando gero modular caiu pra 35 mega. Bom ne’ !!!

j-menezes

Tô te enviando o exemplo em questão pra você confrontar com o seu e ver o que pode estar diferente.
basta descompactar dentro do diretorio do diretorio /C:/Users/Clodoaldo/Documents/NetBeansProjects/

Depois abra ele no NetBeans projeto TesteSimples

Somente ajusta a Properties, colocando a sua jdk e tambem ajusta o caminho das bibliotecas
do javaFX.

Compilar com Clean and Build

modularFXSimples.zip (29,3,KB)

C

Então vou inisistir em aprender o seu! ( modular…) kkk

C
Obrigado, vou fazer e te falo!

na certa deve ser bobeira de aprendiz!

C
j-menezes, não sei que magica vc fez  no programa, mas agora funcionou TUDO!!! kkkk

comparei linha a linha os programas, e a maior diferença que vi foi no module info, que no seu tinha mais linhas que no meu. Copei tudo e passou a funcionar o meu também!!
Inclusive sumiu aquele erro de tamanho de fonte que dava no .fxml.

A unica coisa que não rodou foi o .jar , nem o meu nem o seu, mas isso fica pra depois!
Vou fazer um programa do zero pra ver se foi magica sua…kkkk
brincadeiras a parte, muito obrigado pela paciencia!!!

j-menezes
Solucao aceita

Se deu tudo certo fico feliz e peço a você que marque que esse topico está resolvido.
Caso tenha novas duvidas, por gentileza abra outro topico.

Bons Codigos

C

valeu !!! Obrigado!

Criado 23 de julho de 2019
Ultima resposta 2 de ago. de 2019
Respostas 32
Participantes 3