2017-12-11 13 views
1

testfx로 테스트를 작성하는 방법을 가르쳐주는 간단한 JavaFX 프로젝트가 있습니다. 내 sample.fxml 파일을 복제하지 못하게하는 방법을 알아낼 수 없습니다. 프로젝트의 구조는 현재 :내 JavaFX 테스트 프로젝트에서 중복을 방지하려면 어떻게해야합니까?

enter image description here

내 Main.java는 다음과 같습니다

package sample; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

public class Main extends Application { 

    static Stage stage; 

    @Override 
    public void start(Stage stage) throws Exception { 
     Main.stage = stage; 
     Parent root = FXMLLoader.load(getClass().getResource("../../resources/sample.fxml")); 
     Scene scene = new Scene(root, 300, 275); 
     stage.setTitle("FXML Welcome"); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

내 테스트 클래스에서 sample.fxml에 액세스 할 수 있으며, 그것은 단지 더 쉬웠다 중복으로 testfx를 배울 수 있습니다.하지만 분명히 앞으로 나아갈 길이 아닙니다. 또한 테스트 클래스 내에서 start()를 호출하여 장면을 만들려고했지만 launch()를 두 번 이상 호출 할 수 없다는 오류가 발생합니다.

누구든지이 문제가 발생했거나 앞으로 나아갈 길을 찾았습니까?

답변

1

.fxml 파일을 복제하지 않으려면 (내가 이상하지는 않지만) src/main/resources에서 파일을로드하는 것이 좋습니다. 컨트롤러 (또는 테스트 코드가 아닌 다른 클래스)의 ClassLoader를 사용하면됩니다.

String filename = "sample.fxml"; 
    ClassLoader loader = Controller.class.getClassLoader(); 
    File file = new File(loader.getResource(filename).getFile()); 
    Parent root = FXMLLoader.load(loader.getResource(filename)); 
+0

감사합니다. 정말 고마워요! –