JavaFX Application

时间:2017-11-23 17:01:41

标签: java spring exception javafx dependency-injection

乍一看这个问题似乎有些重复。我在谷歌做了一些搜索。但不幸的是,结果都没有与我匹配。我在下面给出了问题链接。

Exception in Application start method java.lang.reflect.InvocationTargetException JavaFX image transition

JavaFX - Exception in Application start method?

Exception in Application start method

Exception in Application start method

Exception in Application start method java.lang.reflect.InvocationTargetException

好的,让我来解决我的问题。我使用Netbeans和Spring进行依赖注入。我的代码运行正常。我刚刚添加了一个新方法,并用一个按钮连接它。按下运行按钮后,我收到了错误消息。

堆栈追踪:

Executing C:\Users\Dell-3460\Documents\NetBeansProjects\JavaFXApplication_Vocubulary_Own\dist\run151098339\JavaFXApplication_Vocubulary_Own.jar using platform C:\Program Files\Java\jdk1.8.0_102\jre/bin/java
Start1...........
Nov 23, 2017 10:30:52 PM javafx.fxml.FXMLLoader$ValueElement processValue
WARNING: Loading FXML document with JavaFX API of version 8.0.141 by JavaFX runtime of version 8.0.102
Nov 23, 2017 10:30:53 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1d4f4e8e: startup date [Thu Nov 23 22:30:53 BDT 2017]; root of context hierarchy
Nov 23, 2017 10:30:53 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [vocubularyBean.xml]
Exception in Application start method

从这个StackTrace我无法追踪错误。然后我在start方法中使用了Try-Catch但没有确切的错误消息。

开始方法:

@Override
    public void start(Stage stage) throws Exception
        {
        System.out.println("Start1...........");
        try
          {
            Parent root = FXMLLoader.load(getClass().getResource("FXML_Main.fxml"));
            System.out.println("Start2...........");
            Scene scene = new Scene(root);
            stage.setScene(scene);
            stage.show();
          } 
        catch (Exception e)
            {
              e.printStackTrace();
            }
        }

在启动方法中添加Try-Catch后的堆栈跟踪:

Executing C:\Users\Dell-3460\Documents\NetBeansProjects\JavaFXApplication_Vocubulary_Own\dist\run151098339\JavaFXApplication_Vocubulary_Own.jar using platform C:\Program Files\Java\jdk1.8.0_102\jre/bin/java
Start1...........
Nov 23, 2017 10:30:52 PM javafx.fxml.FXMLLoader$ValueElement processValue
WARNING: Loading FXML document with JavaFX API of version 8.0.141 by JavaFX runtime of version 8.0.102
Nov 23, 2017 10:30:53 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1d4f4e8e: startup date [Thu Nov 23 22:30:53 BDT 2017]; root of context hierarchy
Nov 23, 2017 10:30:53 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [vocubularyBean.xml]
Exception in Application start method

从这个堆栈跟踪我认为FXML文件中可能存在一些问题,因为第二行没有打印。但我的问题是为什么它没有显示任何错误信息?我正在使用SceneBuilder。 我创建了一个空的FXML文件,它正在加载。

控制器代码片段:

@FXML
    private void other_save_new_and_save_edit_other_word_button_action(ActionEvent actionEvent)
        {  
            bean_controller_Other_I.other_save_new_and_save_edit_other_word_button_action(actionEvent);
        }

FXML代码片段:

 <Button layoutX="197.0" layoutY="32.0" mnemonicParsing="false" onAction="#other_save_new_and_save_edit_other_word_button_action" prefWidth="75.0" text="Save" AnchorPane.leftAnchor="197.0" />

问题已识别:

public class ApplicationContextSingleTon
    {
        private static ApplicationContext applicationContext ;
        public static ApplicationContext getBean()
            {
                System.out.println(" AC_Line 1 : ");
                if(applicationContext == null)
                  {
                    System.out.println(" AC_Line 2 : ");
                    applicationContext = new ClassPathXmlApplicationContext("vocubularyBean.xml");
                    System.out.println(" AC_Line 3 : ");
                  }
                return applicationContext;
            }
    }



public interface ApplicationContext_I
    {
        ApplicationContext applicationContext = ApplicationContextSingleTon.getBean();
    }
public class Controller_Main implements Initializable,ApplicationContext_I
    {
    Controller_e2b_I bean_controller_e2b_I;
    Controller_e2e_I bean_controller_e2e_I;
    Controller_Other_I bean_controller_Other_I;

    @Override
    public void initialize(URL url, ResourceBundle rb)
        {
            bean_Initializer();
            System.out.println(".......Start........");
        }
    public void bean_Initializer()
        {
            bean_controller_e2b_I = (Controller_e2b_I) applicationContext.getBean("bean_Controller_e2b_Impl");
            bean_controller_e2b_I.setController_Main(this);

            bean_controller_e2e_I = (Controller_e2e_I) applicationContext.getBean("bean_Controller_e2e_Impl");
            bean_controller_e2e_I.setController_Main(this);

            bean_controller_Other_I = (Controller_Other_I) applicationContext.getBean("bean_Controller_Other_Impl");
            bean_controller_Other_I.setController_Main(this);
        }
//other codes
    }
<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
        >

    <bean id="bean_DAO_e2b_Impl" class="com.vocubulary.e2b.DAO_e2b_Impl" ></bean>
    <bean id="bean_Controller_e2b_Impl" class="com.vocubulary.e2b.Controller_e2b_Impl" >
        <property name="bean_DAO_e2b_I" ref="bean_DAO_e2b_Impl"/>
    </bean>

    <bean id="bean_DAO_e2e_Impl" class="com.vocubulary.e2e.DAO_e2e_Impl" ></bean>
    <bean id="bean_Controller_e2e_Impl" class="com.vocubulary.e2e.Controller_e2e_Impl" >
        <property name="bean_DAO_e2e_I" ref="bean_DAO_e2e_Impl"/>
    </bean>

    <!--start : problem Area-->
    <bean id="bean_DAO_Other_Impl" class="com.vocubulary.other.DAO_Other_Impl" ></bean>
    <bean id="bean_Controller_other_Impl" class="com.vocubulary.other.Controller_Other_Impl" >
        <property name="bean_DAO_Other_I" ref="bean_DAO_Other_Impl"/>
    </bean>
    <!--end : problem Area-->
</beans>

我认为没有必要描述代码,因为它们是自我解释的。我已经在xml映射文件中发现了一些xml代码问题。我想最后我已经确定了问题所在。

如果我在xml映射文件中的问题区域内保持代码处于活动状态,那么问题就出现了。但如果我正在评论这些线路,该计划开始很好。

另一个问题是,如果这些行处于活动状态,则在ApplicationContextSingleTon类中,不会打印“AC_Line 3”。表示应用程序正在“AC_Line 2”停止。

我想我已经正确地映射了这些类。因为我正在使用Netbeans,如果我对类名进行ctrl + clik,映射到问题区域,Netbeans就把我带到了课堂上。

现在我有两个问题:

  1. 为什么我没有得到完整的堆栈跟踪?

  2. 这些线路有什么问题?

2 个答案:

答案 0 :(得分:0)

我几乎没有遇到这个问题,也无法弄清楚为什么不打印异常。像您一样,我尝试将整个Start方法包含在try-catch中。 事实证明STDERR没有发送到正确的位置。我发现此问题的方法是(再次)用try-catch包围,并使用System.out.println(ex)代替ex.printStackTrace()。您也可以使用ex.printStackTrace(System.out)

我想我参加晚会很晚,但是希望我可以帮助任何可能遇到同样问题的人。

答案 1 :(得分:0)

我最近遇到了打印“启动方法中的异常”但没有打印堆栈跟踪的问题。捕获异常的解决方案(至少对我而言)是捕获 Throwable 而不是 Exception。示例:

@Override
public void start(Stage stage) throws Exception {
    try {
        //... start method code here
    } catch(Throwable t) {
        t.printStackTrace()
    }
}