<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>What I often do when I want to test changes to FX internals is to
      not build FX at all, but instead just copy the classes I need to
      change into my project and leaving them in the internal package.</p>
    <p>So for example, I want to change something in Window, I just copy
      the class into my mini project:</p>
    <p>- src/main/java/javafx/stage/Window.java<br>
      - src/main/java/app/MyApp.java<br>
      - pom.xml --> depends on JavaFX 25 maven artifacts or say
      26-ea+18<br>
    </p>
    <p>No `module-info.java`</p>
    <p>When you run this, you may get an error that you can't start your
      application like this.  You can work around that with a mini
      launcher class:</p>
    <p>     public void main(String... args) {<br>
                 Application.launch(MyApp.class, args);<br>
           }<br>
    </p>
    <p>Now it starts without whining about module restrictions.</p>
    <p>The Window class here can be modified in most ways, but you can't
      remove methods that may be overridden.  You can remove "sealed"
      and "permits" if you're copying a class that has those (like
      Node).</p>
    <p>A screenshot of a project that I used to debug several issues
      over the past few days:</p>
    <p><img src="cid:part1.8N7MdBEf.P4ImMWBp@gmail.com" alt=""></p>
    <p><br>
    </p>
    <p>--John<br>
    </p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 21/12/2025 22:27, Cormac Redmond
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAG_-AaAM1cwbH6p2g6oHs3p-_EX2UGKo9Svu8tJZtDQzGX7j6A@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">
        <div class="gmail_default"
          style="font-family:verdana,sans-serif">Hi,</div>
        <div class="gmail_default"
          style="font-family:verdana,sans-serif"><br>
        </div>
        <div class="gmail_default"
          style="font-family:verdana,sans-serif">Are there any tricks to
          quickly spinning up a visible application (from a test or
          otherwise), from within the JFX project, in order to see your
          changes?</div>
        <div class="gmail_default"
          style="font-family:verdana,sans-serif"><br>
        </div>
        <div class="gmail_default"
          style="font-family:verdana,sans-serif">Obviously building the
          SDK and "using" it in an application is time consuming.</div>
        <div class="gmail_default"
          style="font-family:verdana,sans-serif"><br>
        </div>
        <div class="gmail_default"
          style="font-family:verdana,sans-serif">I've seen this in
          build.gradle, where I assume StubToolKit automatically runs a
          sort of headless Application for tests without tests needing
          to manage it. Can it be replaced with anything?</div>
        <div class="gmail_default"
          style="font-family:verdana,sans-serif"><br>
        </div>
        <blockquote style="margin:0 0 0 40px;border:none;padding:0px">
          <div class="gmail_default" style=""><font face="monospace">   
              test {</font></div>
          <div class="gmail_default" style=""><font face="monospace">   
                  def cssDir =
              file("${TEST_SDK_DIR}/shims/${moduleName}/javafx")</font></div>
          <div class="gmail_default" style=""><font face="monospace">   
                  jvmArgs enableNativeGraphics</font></div>
          <div class="gmail_default" style=""><font face="monospace">   
                  jvmArgs
              "-Djavafx.toolkit=test.com.sun.javafx.pgstub.StubToolkit",</font></div>
          <div class="gmail_default" style=""><font face="monospace">   
                      "-DCSS_META_DATA_TEST_DIR=$cssDir"</font></div>
          <div class="gmail_default" style=""><font face="monospace">   
              }</font></div>
          <div class="gmail_default" style=""><br>
          </div>
        </blockquote>
        <font face="monospace"><span class="gmail_default"
            style="font-family:verdana,sans-serif">I know some people
            copy UI classes into their project (keeping the same package
            name as the real JFX control class, where it will take
            precedence), and develop/test it <i>there</i>. If that's
            the best solution to date, that's fine.</span><br>
        </font>
        <div><font face="monospace"><span class="gmail_default"
              style="font-family:verdana,sans-serif"><br>
            </span></font></div>
        <div><font face="monospace"><span class="gmail_default"
              style="font-family:verdana,sans-serif">In general, any
              other quick development tips (in the realm of quickly
              visually testing your changes) would be appreciated...</span></font></div>
        <div><font face="monospace"><span class="gmail_default"
              style="font-family:verdana,sans-serif"><br>
            </span></font></div>
        <div><font face="monospace"><span class="gmail_default"
              style="font-family:verdana,sans-serif">Thanks in advance.</span></font></div>
        <div><font face="monospace"><span class="gmail_default"
              style="font-family:verdana,sans-serif"><br>
            </span></font></div>
        <div><font face="monospace"><span class="gmail_default"
              style="font-family:verdana,sans-serif"><br>
            </span></font></div>
        <div><font face="monospace"><span class="gmail_default"
              style="font-family:verdana,sans-serif"><br>
            </span></font></div>
        <div><font face="monospace"><span class="gmail_default"
              style="font-family:verdana,sans-serif">Kind Regards,</span></font></div>
        <div><font face="monospace"><span class="gmail_default"
              style="font-family:verdana,sans-serif">Cormac</span></font></div>
      </div>
    </blockquote>
  </body>
</html>