2016-07-17 1 views
0

foreach 루프를 사용하여 약 180 개의 창을 만들고 초기화합니다. 창의 한 부분은 회 전자입니다. 각각에 대해 새로운 SpinnerValueFactory이 만든 회 :JavaFX : StackOverflow의 새로운 SpinnerValueFactory 결과

SpinnerValueFactory factory = new SpinnerValueFactory.IntegerSpinnerValueFactory(0, products.get(i).getStock()); 
//getStock() returns an integer between 0 and 300 

foreach는 루프, 나는 다음과 같은 오류 얻을 겪었 때마다 6 시간 : 그것은 자바처럼 보이는

Exception in Application start method 
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.StackOverflowError (the following lines repeat) 
    at javafx.scene.control.SpinnerValueFactory$IntegerSpinnerValueFactory.lambda$new$215(SpinnerValueFactory.java:475) 
    at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:182) 
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81) 
    at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:105) 
    at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112) 
    at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146) 
    at javafx.scene.control.SpinnerValueFactory.setValue(SpinnerValueFactory.java:150) 
at javafx.scene.control.SpinnerValueFactory$IntegerSpinnerValueFactory.lambda$new$215(SpinnerValueFactory.java:478)(...) 

이 때문에 새로운 SpinnerValueFactories을 만드는 중지를 스택 오버플로. 그런 다음 Java는 공장을 스피너에 설정하려고 시도하지만 공장이 없으므로 더 많은 오류가 인쇄됩니다. 내가 메서드 호출을 제거하면 는 오류가 발생하지 :

SpinnerValueFactory factory = new SpinnerValueFactory.IntegerSpinnerValueFactory(0, 5); 

이 프로젝트는 데이터베이스, FXML 파일의 컨트롤러와 발사 클래스에서 중첩된다. 최소한의 예제를 만들려고했지만 단축 된 메서드를 제외한 모든 것을 제거하면 오류가 발생하지 않았습니다. 흥미롭게도 동일한 프로젝트를 사용하는 내 친구와 동일한 SDK에서 오류가 발생하지 않습니다. 나를 위해 그것은 또한 두 번째 버전은 아무 문제없이 모든 180 창을 만드는 반면 StackOverflow 발생할 때까지 foreach 루프를 통해 이동하는 데 정확히 6 번 걸리는 이상한 것처럼 보입니다. StackOverflow가 getStock() 호출을 할 때만 발생하는 이유는 무엇입니까?

+0

공장은 어디서 생성됩니까? 코드에 대한 일부 컨텍스트가 필요합니다. 새로운 팩토리가 생성 될 때마다 - 변경 리스너 내에서 인용되거나 또는 하나씩 호출되는 것처럼 보이는가? – Itai

+0

팩토리는 updatePanes()라는 메소드로 작성됩니다. 뷰를 처음으로 초기화 할 때 및 뷰의 버튼을 클릭 할 때마다 호출됩니다. updatePanes() 메서드가 initialize()에 의해 처음 호출 될 때 오류가 발생합니다. – Duval

+0

SpinnerValueFactory factory = new ...에 중단 점을 추가하고 stack trace (ide, eclipse, netbeans ...)를 표시 할 수 있습니까? – guleryuz

답변

1

내 IDE의 디버거 (실제로 처음)를 사용하여 'Java 예외 중단 점'을 설정하는 옵션을 찾았습니다. 그것은 내 예외에 몇 가지 정보를 추가 : http://i.stack.imgur.com/jGc7J.png

Method threw 'java.lang.StackOverflowError' exception. Cannot evaluate java.lang.Integer.toString() 
value=-2 

는 분명 내가 0으로 공장의 분 값을 설정하고 작동하지 않습니다 -2 최대 값을 설정했습니다. 데이터베이스의 값을 변경했는데 이제는 정상적으로 작동합니다. 참으로 난처한 잘못입니다. 당신의 도움을 주셔서 감사합니다!

관련 문제