2016-12-16 3 views
4

JavaFX를 사용하여 스크린 레코더를 만들려고합니다. 나는 하나를 만드는 방법을 찾고 있었는데, this 기사를 보았을 때, 나는 그것을 시험해 보았고 정말 좋아했다. 그래서 제공된 코드로 JavaFX FXML 애플리케이션을 만들기로 결정했다.컨트롤러의 메인 클래스에서 스테이지를 사용할 수 없습니다.

@FXML 
void startOnAction(ActionEvent event) { 
    FXMLDocumentController FXML = new FXMLDocumentController(); 
    FXML.console.setText("######### Starting Screen Recorder #########"); 
    try { 
     Thread.sleep(250); 
    } catch (InterruptedException ex) { 
    } 
    Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); 
    FXML.console.appendText("Your Screen [Width, Height]: " + "[" + screen.getWidth() + "," + screen.getHeight() + "]\nWhen the Recording starts, this window will minimize, to stop them recording, open this window."); 
    try { 
     Thread.sleep(1000); 
    } catch (InterruptedException ex) { 
    } 
    FXML.console.appendText("The recording will start in 5 seconds"); 
    int num = 5; 
    for (int i = 0; i <= 5; i++) { 
     System.out.print(num); 
     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException ex) { 
     } 
     num = num - 1; 
    } 
    FXML.console.appendText("Start!"); 
    File f = new File(store); 
    if (!f.exists()) { 
     f.mkdir(); 
    } 
    startRecord(); 
    Recorder R = new Recorder(); 
    R.stage.setIconified(true); 
    R.stage.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> { 
     focusState(newValue); 
    }); 
} 

이는 FXMLDocumentController의 방법이다, 나는 '콘솔'밖으로 인쇄 내가 그것을 인쇄 할 텍스트의 변수로 내 텍스트 영역을 만들고 싶어.

그러나 내가 사용하는 모든 라인은이 FXMLDocumentController FXML = new FXMLDocumentController();Recorder R = new Recorder(); 에 오류가 있습니다.

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774) 
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Node.fireEvent(Node.java:8413) 
    at javafx.scene.control.Button.fire(Button.java:185) 
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) 
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) 
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) 
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) 
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:380) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:416) 
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415) 
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
    at com.sun.glass.ui.View.notifyMouse(View.java:937) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) 
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) 
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769) 
    ... 48 more 
Caused by: java.lang.NullPointerException 
    at recorder.FXMLDocumentController.startOnAction(FXMLDocumentController.java:127) 
    ... 58 more 

Line 127 is `Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774) 
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Node.fireEvent(Node.java:8413) 
    at javafx.scene.control.Button.fire(Button.java:185) 
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) 
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) 
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) 
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) 
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:380) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:416) 
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415) 
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
    at com.sun.glass.ui.View.notifyMouse(View.java:937) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) 
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) 
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769) 
    ... 48 more 
Caused by: java.lang.NullPointerException 
    at recorder.FXMLDocumentController.startOnAction(FXMLDocumentController.java:127) 
    ... 58 more` 

라인 (127) 내가 위에서 게시 된 코드,이 라인 4 : 여기

는 오류입니다.

전체 코드 아래


...

Main 클래스 :

package recorder; 

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

public class Recorder extends Application { 

    public Stage stage; 

    @Override 
    public void start(Stage stage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml")); 

     Scene scene = new Scene(root); 
     stage.setResizable(false); 
     stage.setScene(scene); 
     stage.show(); 
    } 

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

} 

FXML 문서 (코드 싹둑가 출신)

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

<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.TextArea?> 
<?import javafx.scene.control.TextField?> 
<?import javafx.scene.layout.ColumnConstraints?> 
<?import javafx.scene.layout.GridPane?> 
<?import javafx.scene.layout.RowConstraints?> 

<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="639.0" prefWidth="578.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="recorder.FXMLDocumentController"> 
    <columnConstraints> 
     <ColumnConstraints hgrow="SOMETIMES" minWidth="578.0" prefWidth="578.0" /> 
    </columnConstraints> 
    <rowConstraints> 
     <RowConstraints maxHeight="1.7976931348623157E308" minHeight="10.0" prefHeight="95.0" vgrow="SOMETIMES" /> 
     <RowConstraints maxHeight="245.0" minHeight="9.0" prefHeight="12.0" vgrow="SOMETIMES" /> 
     <RowConstraints maxHeight="481.0" minHeight="10.0" prefHeight="478.0" vgrow="SOMETIMES" /> 
    </rowConstraints> 
    <children> 
     <Button fx:id="start" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#startOnAction" prefHeight="220.0" prefWidth="578.0" text="Start Recording" /> 
     <TextArea fx:id="console" editable="false" prefHeight="200.0" prefWidth="200.0" promptText="Console" wrapText="true" GridPane.rowIndex="2" /> 
     <TextField fx:id="input" prefHeight="105.0" prefWidth="578.0" promptText="File Name" GridPane.rowIndex="1" /> 
    </children> 
</GridPane> 

FXMLDocumentController :

package recorder; 

import java.awt.Dimension; 
import java.awt.Rectangle; 
import java.awt.Robot; 
import java.awt.Toolkit; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.OutputStream; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ResourceBundle; 
import java.util.Vector; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javafx.beans.value.ObservableValue; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Button; 
import javafx.scene.control.TextArea; 
import javafx.scene.control.TextField; 
import javax.imageio.ImageIO; 
import javax.media.MediaLocator; 
import javax.swing.JOptionPane; 

public class FXMLDocumentController implements Initializable { 

    File file; 
    /** 
    * Screen Width. 
    */ 
    public static int screenWidth = (int) Toolkit.getDefaultToolkit() 
      .getScreenSize().getWidth(); 

    /** 
    * Screen Height. 
    */ 
    public static int screenHeight = (int) Toolkit.getDefaultToolkit() 
      .getScreenSize().getHeight(); 

    /** 
    * Interval between which the image needs to be captured. 
    */ 
    public static int captureInterval = 50; 

    /** 
    * Temporary folder to store the screenshot. 
    */ 
    public static String store = "tmp"; 

    /** 
    * Status of the recorder. 
    */ 
    public static boolean record = false; 

    @FXML 
    private Button start; 

    @FXML 
    private TextArea console; 

    @FXML 
    private TextField input; 

    public static void startRecord() { 
     Thread recordThread = new Thread() { 
      @Override 
      public void run() { 
       Robot rt; 
       int cnt = 0; 
       try { 
        rt = new Robot(); 
        while (cnt == 0 || record) { 
         BufferedImage img = rt.createScreenCapture(new Rectangle(screenWidth, screenHeight)); 
         ImageIO.write(img, "jpeg", new File("./" + store + "/" 
           + System.currentTimeMillis() + ".jpeg")); 
         if (cnt == 0) { 
          record = true; 
          cnt = 1; 
         } 
         Thread.sleep(captureInterval); 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 
     recordThread.start(); 
    } 

    /** 
    * @throws MalformedURLException 
    * 
    */ 
    public static void makeVideo(String movFile) throws MalformedURLException { 
     FXMLDocumentController FXML = new FXMLDocumentController(); 
     FXML.console.appendText("Processing Video... please wait"); 
     JpegImagesToMovie imageToMovie = new JpegImagesToMovie(); 
     Vector<String> imgLst = new Vector<String>(); 
     File f = new File(store); 
     File[] fileLst = f.listFiles(); 
     for (int i = 0; i < fileLst.length; i++) { 
      imgLst.add(fileLst[i].getAbsolutePath()); 
     } 
     // Generate the output media locators. 
     MediaLocator oml; 
     if ((oml = imageToMovie.createMediaLocator(movFile)) == null) { 
      FXML.console.appendText("Error in processing"); 
      System.exit(0); 
     } 
     imageToMovie.doIt(screenWidth, screenHeight, (1000/captureInterval), imgLst, oml); 

    } 

    @FXML 
    void setOnAction(ActionEvent event) { 
     String path = JOptionPane.showInputDialog("Type in the File Path", "C:/Users/" + System.getProperty("user.name") + "/Desktop"); 
     file = new File(path); 
    } 

    @FXML 
    void startOnAction(ActionEvent event) { 
     FXMLDocumentController FXML = new FXMLDocumentController(); 
     FXML.console.setText("######### Starting Screen Recorder #########"); 
     try { 
      Thread.sleep(250); 
     } catch (InterruptedException ex) { 
     } 
     Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); 
     FXML.console.appendText("Your Screen [Width, Height]: " + "[" + screen.getWidth() + "," + screen.getHeight() + "]\nWhen the Recording starts, this window will minimize, to stop them recording, open this window."); 
     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException ex) { 
     } 
     FXML.console.appendText("The recording will start in 5 seconds"); 
     int num = 5; 
     for (int i = 0; i <= 5; i++) { 
      System.out.print(num); 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException ex) { 
      } 
      num = num - 1; 
     } 
     FXML.console.appendText("Start!"); 
     File f = new File(store); 
     if (!f.exists()) { 
      f.mkdir(); 
     } 
     startRecord(); 
     Recorder R = new Recorder(); 
     R.stage.setIconified(true); 
     R.stage.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> { 
      focusState(newValue); 
     }); 
    } 

    ; 

    private void focusState(boolean value) { 
     if (value) { 
      System.out.println("Focus Gained"); 
      record = false; 
      try { 
       makeVideo(input.getText() + ".mov"); 
      } catch (MalformedURLException ex) { 
      } 
     } else { 
     } 
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 

    } 

} 

본인의 지침 및 내용을 올바르게 준수하기 바랍니다.

답변

1

FXMLLoader으로로드 된 fxml에 연결되어 있지 않은 FXMLDocumentController의 인스턴스를 만들면됩니다.

그러나 그 필드 값의 주입을 담당 할 FXMLLoader의 상기 fxml 파일이로드 될 때 단지 FXMLLoader 사용할 컨트롤러 클래스의 인스턴스 필드를 삽입 않는다 (즉, fx:controller에 기초 FXMLLoader 자체에 의해 생성 된 어느 하나 애트리뷰트 또는 setController을 사용하여 제공되는 애트리뷰트이거나 두 경우 모두 load을 호출 한 직후에 FXMLLoader.getController을 사용하여 인스턴스를 검색 할 수 있습니다.

수정되지 않은 필드의 기본값은 null이며 NPE가 기본값으로 사용됩니다. 여기 :

FXMLDocumentController FXML = new FXMLDocumentController(); 
FXML.console.setText("######### Starting Screen Recorder #########"); 

this.console.setText("######### Starting Screen Recorder #########"); 

아마 성공하지만,이 시간 동안 응용 프로그램 동결을 만들 것입니다 몇 초 동안 Thread.sleep, 당신의 코드에서 응용 프로그램 스레드를 차단하고 있습니다 것입니다 ...

장면이 그것에 추가 한 후

는 대신 현장 내부 Node를 사용할 수 있으며, Window을 검색하려면 다음

Stage stage = (Stage) this.console.getScene().getWindow(); 
stage.setIconified(true); 
stage.focusedProperty()... 
+0

감사합니다. – Gamer818

+0

이 부분은 어떻게됩니까?레코더 R = 새 레코더(); R.stage.setIconified (true); addListener (ObservableValue observable, Boolean oldValue, Boolean newValue) -> { focusState (newValue); }}); – Gamer818

+0

다른 클래스에서 왔기 때문에 'this'가 작동하지 않습니다. – Gamer818