Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I can't debug an application using netbeans 11 with JavaFX 12

I've downloaded netbeans 11 with support for java 12 So I followed up the steps from the Gluon webpage running JavaFX and Netbeans Non modular with maven > https://openjfx.io/openjfx-docs/#next-steps

I have configured as showed in the instructions the action to run this app.

Run Project clean javafx:run

But there is nothing specified to debug the project. Is there a way to debug this javaFX project?

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>SimonSaysGFX</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>12</maven.compiler.source>
        <maven.compiler.target>12</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>12.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-media</artifactId>
            <version>12.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>12.0.1</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>12</release>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.2</version>
                <configuration>
                    <mainClass>com.mycompany.simonsaysgfx.App</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <name>SimonSaysGFX</name>
</project>
like image 809
Alex Avatar asked May 18 '19 08:05

Alex


2 Answers

If you see the documentation of the javafx-maven-plugin, you can add some VM arguments to the run goal in order to debug your project in NetBeans.

However, to keep the usual run goal ready to just run the project and not debug, without commenting out the added options, we can add a second execution to the plugin.

Modify your plugin like this:

<plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>0.0.2</version>
    <executions>
        <execution>
            <!-- Default configuration for running -->
            <id>default-cli</id>
            <configuration>
                <mainClass>com.mycompany.simonsaysgfx.App</mainClass>
            </configuration>
        </execution>
        <execution>
            <!-- Configuration for debugging -->
            <id>debug</id>
            <configuration>
                <options>
                    <option>-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:8000</option>
                </options>
                <mainClass>com.mycompany.simonsaysgfx.App</mainClass>
            </configuration>
        </execution>
    </executions>
</plugin>

Now you can run from command line:

mvn clean javafx:run

to run as usual your application, and:

mvn clean javafx:run@debug

to start debug mode. Then you will see something like:

[INFO] --- javafx-maven-plugin:0.0.2:run (debug) @ Project ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 3 source files to /path/to/project/target/classes
Listening for transport dt_socket at address: 8000

At this point, you need to set your breakpoints and attach a debugger from NetBeans -> Debug -> Attach Debugger to port 8000:

debugger

Click OK and you will be able to debug your projects.

Note that you can also define custom NetBeans actions to use the Run and Debug buttons. Add a nbactions.xml file to the root of your project, with this two actions:

<?xml version="1.0" encoding="UTF-8"?>
<actions>
    <action>
        <actionName>run</actionName>
        <goals>
            <goal>clean</goal>
            <goal>javafx:run</goal>
        </goals>
    </action>
    <action>
        <actionName>jlink</actionName>
        <goals>
            <goal>clean</goal>
            <goal>javafx:jlink</goal>
        </goals>
    </action>
    <action>
        <actionName>debug</actionName>
        <goals>
            <goal>clean</goal>
            <goal>javafx:run@debug</goal>
        </goals>
    </action>
</actions>

Now you can use NetBeans run and debug buttons.

like image 101
José Pereda Avatar answered Oct 10 '22 04:10

José Pereda


José's answer is good. Just go little bit further.

In pom.xml set the address=${jpda.address} instead of address=*:8000

    <execution>
        <!-- Configuration for debugging -->
        <id>debug</id>
        <configuration>
            <options>
                <option>-agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address}</option>
            </options>
            <mainClass>cz.masci.mvcpattern.mvc.App</mainClass>
        </configuration>
    </execution>

Be aware of set server=n, otherwise the application will not start.

In the debug action set jpda.listen=true property

   ...
    <action>
        <actionName>debug</actionName>
        <goals>
            <goal>clean</goal>
            <goal>javafx:run@debug</goal>
        </goals>
        <properties>
            <jpda.listen>true</jpda.listen>
        </properties>
    </action>

Then you don't need to attach debuger anymore. Netbeans does it for you.

like image 20
GrolarDan Avatar answered Oct 10 '22 05:10

GrolarDan