2017-04-08 2 views
0

어제 javaFX 및 장면 작성기를 사용하여 매우 간단한 응용 프로그램에서 버튼 클릭 작동을 얻으려고합니다. 그러나 시도한 모든 것을 (자습서 나 관련 답변을 따라 여기에서) 시도했습니다. 작동하지 않습니다. 나는 새로운 자바 FX 프로젝트를 생성하고이 내 editings 사용하여 만든 파일입니다javaFX-scene 빌더 단추 이벤트가 작동하지 않습니다.

Main.java :

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

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     try { 
      FXMLLoader loader = new 
     FXMLLoader(getClass().getResource("sample.fxml")); 
     loader.setController(new SampleController()); 
     Pane root = loader.load(); 
      Scene scene = new Scene(root,400,400); 
      scene.getStylesheets().add(getClass().getResource 
      ("application.css").toExternalForm()); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

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

SampleControler.java :

package application; 

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 SampleController implements Initializable{ 

    @FXML 
    Button bOk; 
    @FXML 
    Label lbTest; 

    private void handleButtonAction(ActionEvent event) { 
     // Button was clicked, do something... 
     lbTest.setText("Button Action\n"); 
    } 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
     // TODO Auto-generated method stub 
     bOk.setOnAction(this::handleButtonAction); 
    } 

} 

샘플. fxml :

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.layout.Pane?> 


<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" 
    minWidth="-Infinity" prefHeight="220.0" prefWidth="484.0" 
    xmlns="http://javafx.com/javafx/8.0.111" 
    xmlns:fx="http://javafx.com/fxml/1"> 
    <children> 
     <Button id="bOk" layoutX="214.0" layoutY="152.0" 
    mnemonicParsing="false" text="Button" /> 
     <Label id="lbTest" layoutX="214.0" layoutY="57.0" prefHeight="25.0" 
    prefWidth="138.0" text="Label" /> 
    </children> 
</Pane> 

위의 내용은 오류를 나타내지 않지만 단추를 클릭하면 아무 것도하지 않습니다 (레이블의 텍스트를 변경해야 함). fxml 파일에서 onAction을 설정하려고했으나 현장 빌더 나 fxml 파일을 수동으로 편집하여 (내가 onAction을 해결할 수 없음) 상관없이 거기에 무엇을 배치했는지에 관계없이 오류가 발생합니다. (메서드를 작성하여 썼습니다. onAction에서 수정하십시오.) 내가 뭘 잘못하고있어? 나는 FX 사용 후

javafx.fxml.LoadException: 
/home/workspace/testapp/bin/application/sample.fxml 

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409) 
    at application.Main.start(Main.java:16) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) 
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$49(GtkApplication.java:139) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NullPointerException 
    at application.SampleController.initialize(SampleController.java:27) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548) 

:

오류 내가 지금 받고 있어요는 버튼 대신 ID의 ID를하고 라벨 예상대로 버튼을 근무하고 위의 오류는 갔다.

답변

1

당신은 fxml와 컨트롤러를 사용하는 것을 잊었다 :

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" 
    minWidth="-Infinity" prefHeight="220.0" prefWidth="484.0" 
    xmlns="http://javafx.com/javafx/8.0.111" 
    xmlns:fx="http://javafx.com/fxml/1" 
    fx:controller="application.SampleController"> 

또는

FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml")); 
loader.setController(new SampleController()); 
Pane root = loader.load(); 

또한 대신 idfx:id 컨트롤러에 개체를 삽입하는 속성을 사용할 필요가

:

<Button fx:id="bOk" layoutX="214.0" layoutY="152.0" 
     mnemonicParsing="false" text="Button" /> 
<Label fx:id="lbTest" layoutX="214.0" layoutY="57.0" prefHeight="25.0" 
     prefWidth="138.0" text="Label" /> 
+0

두 번째했지만 지금 오류가 발생했습니다 (내 대답을 편집 할 것입니다) –

+0

fx : id 해결, 감사합니다. –

관련 문제