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就把我带到了课堂上。
现在我有两个问题:
为什么我没有得到完整的堆栈跟踪?
这些线路有什么问题?
答案 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()
}
}