-
Notifications
You must be signed in to change notification settings - Fork 66
Model #40
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Model #40
Changes from all commits
7396856
be67e40
83dbcef
20ca18a
968db8b
9f35ccf
37135ee
0ae2722
9886c14
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,2 +1,3 @@ | ||
| target/ | ||
| /.idea/ | ||
| .env |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,22 +1,59 @@ | ||
| package com.example; | ||
|
|
||
| import javafx.event.ActionEvent; | ||
| import javafx.fxml.FXML; | ||
| import javafx.scene.control.Label; | ||
| import javafx.scene.control.ListCell; | ||
| import javafx.scene.control.ListView; | ||
| import javafx.scene.control.TextField; | ||
|
|
||
| /** | ||
| * Controller layer: mediates between the view (FXML) and the model. | ||
| */ | ||
| public class HelloController { | ||
|
|
||
| private final HelloModel model = new HelloModel(); | ||
| private final HelloModel model = new HelloModel(new NtfyConnectionImpl()); | ||
|
|
||
| @FXML | ||
| public ListView<NtfyMessageDto> messageView; | ||
|
|
||
| @FXML | ||
| private Label messageLabel; | ||
|
|
||
| @FXML | ||
| private TextField messageInput; | ||
|
|
||
| @FXML | ||
| private void initialize() { | ||
| if (messageLabel != null) { | ||
| messageLabel.setText(model.getGreeting()); | ||
| } | ||
| messageView.setItems(model.getMessages()); | ||
|
|
||
| if (messageInput != null) { | ||
| messageInput.textProperty().bindBidirectional(model.messageToSendProperty()); | ||
| } | ||
|
|
||
| messageView.setCellFactory(param -> new ListCell<>() { | ||
| @Override | ||
| protected void updateItem(NtfyMessageDto item, boolean empty) { | ||
| super.updateItem(item, empty); | ||
|
|
||
| if (empty || item == null) { | ||
| setText(null); | ||
| } else { | ||
| var time = java.time.Instant.ofEpochSecond(item.time()) | ||
| .atZone(java.time.ZoneId.systemDefault()) | ||
| .toLocalTime(); | ||
| var formatter = java.time.format.DateTimeFormatter.ofPattern("HH:mm"); | ||
| setText(time.format(formatter) + " " + item.message()); | ||
| } | ||
| } | ||
| }); | ||
| } | ||
|
|
||
|
|
||
| public void sendMessage(ActionEvent actionEvent) { | ||
| model.sendMessage(); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -1,9 +1,61 @@ | ||||||||||||||||||||||||||||||||||||||||||||
| package com.example; | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | ||||||||||||||||||||||||||||||||||||||||||||
| import io.github.cdimascio.dotenv.Dotenv; | ||||||||||||||||||||||||||||||||||||||||||||
| import javafx.application.Platform; | ||||||||||||||||||||||||||||||||||||||||||||
| import javafx.beans.property.SimpleStringProperty; | ||||||||||||||||||||||||||||||||||||||||||||
| import javafx.beans.property.StringProperty; | ||||||||||||||||||||||||||||||||||||||||||||
| import javafx.collections.FXCollections; | ||||||||||||||||||||||||||||||||||||||||||||
| import javafx.collections.ObservableList; | ||||||||||||||||||||||||||||||||||||||||||||
| import tools.jackson.databind.ObjectMapper; | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| import java.io.IOException; | ||||||||||||||||||||||||||||||||||||||||||||
| import java.net.URI; | ||||||||||||||||||||||||||||||||||||||||||||
| import java.net.http.HttpClient; | ||||||||||||||||||||||||||||||||||||||||||||
| import java.net.http.HttpRequest; | ||||||||||||||||||||||||||||||||||||||||||||
| import java.net.http.HttpResponse; | ||||||||||||||||||||||||||||||||||||||||||||
| import java.util.ArrayList; | ||||||||||||||||||||||||||||||||||||||||||||
| import java.util.Objects; | ||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+3
to
+18
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion | 🟠 Major Remove unused imports. Lines 3-4 and 10-18 contain unused imports ( Apply this diff: package com.example;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import io.github.cdimascio.dotenv.Dotenv;
import javafx.application.Platform;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
-import tools.jackson.databind.ObjectMapper;
-
-import java.io.IOException;
-import java.net.URI;
-import java.net.http.HttpClient;
-import java.net.http.HttpRequest;
-import java.net.http.HttpResponse;
-import java.util.ArrayList;
-import java.util.Objects;📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||
| import java.util.function.Consumer; | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| /** | ||||||||||||||||||||||||||||||||||||||||||||
| * Model layer: encapsulates application data and business logic. | ||||||||||||||||||||||||||||||||||||||||||||
| */ | ||||||||||||||||||||||||||||||||||||||||||||
| public class HelloModel { | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| private final NtfyConnection connection; | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| private final Consumer<Runnable> uiExecutor; | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| private final ObservableList<NtfyMessageDto> messages = FXCollections.observableArrayList(); | ||||||||||||||||||||||||||||||||||||||||||||
| private final StringProperty messageToSend = new SimpleStringProperty(); | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| public HelloModel(NtfyConnection connection, Consumer<Runnable> uiExecutor) { | ||||||||||||||||||||||||||||||||||||||||||||
| this.connection = connection; | ||||||||||||||||||||||||||||||||||||||||||||
| this.uiExecutor = uiExecutor; | ||||||||||||||||||||||||||||||||||||||||||||
| receiveMessage(); | ||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chainReview receiveMessage() call in constructor. Calling
Verify the behavior of 🏁 Script executed: #!/bin/bash
# Check if receiveMessage starts background tasks immediately
rg -n -B2 -A15 'void receiveMessage' src/main/java/com/example/NtfyConnectionImpl.javaLength of output: 850 I need to verify the constructor and get the complete implementation. Let me gather more information: I need to see the HelloModel constructor to confirm the concern. Let me retrieve that: I need to verify the actual HelloModel constructor to confirm Length of output: 1853 🏁 Script executed: #!/bin/bash
# Display HelloModel.java constructor around line 30-40
sed -n '25,50p' src/main/java/com/example/HelloModel.javaLength of output: 738 Move The constructor calls Choose one:
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| public HelloModel(NtfyConnection connection) { | ||||||||||||||||||||||||||||||||||||||||||||
| this(connection, Platform::runLater); | ||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| public ObservableList<NtfyMessageDto> getMessages() { | ||||||||||||||||||||||||||||||||||||||||||||
| return messages; | ||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| public String getMessageToSend() { | ||||||||||||||||||||||||||||||||||||||||||||
| return messageToSend.get(); | ||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| public StringProperty messageToSendProperty() { | ||||||||||||||||||||||||||||||||||||||||||||
| return messageToSend; | ||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| public void setMessageToSend(String message) { | ||||||||||||||||||||||||||||||||||||||||||||
| messageToSend.set(message); | ||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| /** | ||||||||||||||||||||||||||||||||||||||||||||
| * Returns a greeting based on the current Java and JavaFX versions. | ||||||||||||||||||||||||||||||||||||||||||||
| */ | ||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -12,4 +64,15 @@ public String getGreeting() { | |||||||||||||||||||||||||||||||||||||||||||
| String javafxVersion = System.getProperty("javafx.version"); | ||||||||||||||||||||||||||||||||||||||||||||
| return "Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + "."; | ||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||
| public void sendMessage() { | ||||||||||||||||||||||||||||||||||||||||||||
| String msg = messageToSend.get(); | ||||||||||||||||||||||||||||||||||||||||||||
| if (msg != null && !msg.isBlank()) { | ||||||||||||||||||||||||||||||||||||||||||||
| connection.sendMessage(msg); | ||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+67
to
+72
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Handle sendMessage failure for user feedback. The Apply this diff to at minimum log failures: public void sendMessage() {
String msg = messageToSend.get();
if (msg != null && !msg.isBlank()) {
- connection.sendMessage(msg);
+ boolean success = connection.sendMessage(msg);
+ if (!success) {
+ System.err.println("Failed to send message: " + msg);
+ }
}
}Alternatively, consider returning the boolean or exposing an error property for UI binding. 🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| public void receiveMessage() { | ||||||||||||||||||||||||||||||||||||||||||||
| connection.receiveMessage(m -> uiExecutor.accept(() -> messages.add(m))); | ||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+74
to
+76
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chainAdd error handling and lifecycle management. The
Consider:
Verify if the connection API supports cleanup: 🏁 Script executed: #!/bin/bash
# Check NtfyConnection interface and implementation for lifecycle methods
rg -n -A5 'interface NtfyConnection' --type=java
rg -n 'close|stop|shutdown|disconnect' src/main/java/com/example/NtfyConnection*.javaLength of output: 447 🏁 Script executed: #!/bin/bash
# Check HelloModel class full implementation and interfaces
rg -n -B5 -A15 'public void receiveMessage\(\)' src/main/java/com/example/HelloModel.java
# Check if HelloModel implements AutoCloseable or similar
rg -n 'class HelloModel' src/main/java/com/example/HelloModel.java
# Check NtfyConnection implementations to understand resource management
fd -e java -x grep -l 'implements NtfyConnection' {} \;
# Check for any try-catch in HelloModel
rg -n 'try|catch|finally' src/main/java/com/example/HelloModel.javaLength of output: 390 🏁 Script executed: #!/bin/bash
# Get full HelloModel class declaration to see interfaces
rg -n -A2 'public class HelloModel' src/main/java/com/example/HelloModel.java
# Check NtfyConnectionImpl for lifecycle management
rg -n -B2 -A20 'class NtfyConnectionImpl' src/main/java/com/example/NtfyConnectionImpl.java
# Check if connection field in HelloModel is closeable or has cleanup
rg -n 'connection\s*=' src/main/java/com/example/HelloModel.java
# Check for multiple receiveMessage calls or subscriptions
rg -n 'receiveMessage' src/main/java/com/example/*.javaLength of output: 1459 🏁 Script executed: #!/bin/bash
# Get full NtfyConnectionImpl.receiveMessage implementation
rg -n -A30 'public void receiveMessage' src/main/java/com/example/NtfyConnectionImpl.java
# Check entire NtfyConnectionImpl for close/cleanup methods
rg -n 'close|shutdown|cleanup|dispose' src/main/java/com/example/NtfyConnectionImpl.java
# Get full HelloModel class to see lifecycle
cat src/main/java/com/example/HelloModel.java
# Check if HttpClient is ever closed
rg -n 'http\.' src/main/java/com/example/NtfyConnectionImpl.javaLength of output: 4332 Add error handling and prevent resource leaks in The
Fixes required:
|
||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| package com.example; | ||
|
|
||
| import java.util.function.Consumer; | ||
|
|
||
| public interface NtfyConnection { | ||
|
|
||
| public boolean sendMessage(String message); | ||
|
|
||
| public void receiveMessage(Consumer<NtfyMessageDto> messageHandler); | ||
| } |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,95 @@ | ||||||||||||||||||||||||||
| package com.example; | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| import io.github.cdimascio.dotenv.Dotenv; | ||||||||||||||||||||||||||
| import javafx.application.Platform; | ||||||||||||||||||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion | 🟠 Major Remove unused Platform import.
Apply this diff: import io.github.cdimascio.dotenv.Dotenv;
-import javafx.application.Platform;
import tools.jackson.databind.ObjectMapper;📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||
| import tools.jackson.databind.ObjectMapper; | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| import java.io.IOException; | ||||||||||||||||||||||||||
| import java.net.URI; | ||||||||||||||||||||||||||
| import java.net.http.HttpClient; | ||||||||||||||||||||||||||
| import java.net.http.HttpRequest; | ||||||||||||||||||||||||||
| import java.net.http.HttpResponse; | ||||||||||||||||||||||||||
| import java.util.Objects; | ||||||||||||||||||||||||||
| import java.util.function.Consumer; | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| public class NtfyConnectionImpl implements NtfyConnection { | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| private final HttpClient http = HttpClient.newHttpClient(); | ||||||||||||||||||||||||||
| private final String hostName; | ||||||||||||||||||||||||||
| private final ObjectMapper mapper = new ObjectMapper(); | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| public NtfyConnectionImpl() { | ||||||||||||||||||||||||||
| Dotenv dotenv = Dotenv.load(); | ||||||||||||||||||||||||||
| String envHost = dotenv.get("HOST_NAME"); | ||||||||||||||||||||||||||
| if (envHost == null || envHost.isBlank()) { | ||||||||||||||||||||||||||
| throw new IllegalStateException("Environment variable 'HOST_NAME' is required but was not found."); | ||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||
| hostName = envHost; | ||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| public NtfyConnectionImpl(String hostName) { | ||||||||||||||||||||||||||
| this.hostName = hostName; | ||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| @Override | ||||||||||||||||||||||||||
| public boolean sendMessage(String message) { | ||||||||||||||||||||||||||
| //Todo: Send message using HTTPClient | ||||||||||||||||||||||||||
coderabbitai[bot] marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||
| HttpRequest httpRequest = HttpRequest.newBuilder() | ||||||||||||||||||||||||||
| .POST(HttpRequest.BodyPublishers.ofString(message)) | ||||||||||||||||||||||||||
| .uri(URI.create(hostName + "/mytopic")) | ||||||||||||||||||||||||||
| .timeout(java.time.Duration.ofSeconds(5)) | ||||||||||||||||||||||||||
| .build(); | ||||||||||||||||||||||||||
|
Comment on lines
+36
to
+41
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Critical: sendMessage ignores the parameter and sends hardcoded text. The method accepts a Apply this diff to use the actual message parameter: @Override
public boolean sendMessage(String message) {
- //Todo: Send message using HTTPClient
-
HttpRequest httpRequest = HttpRequest.newBuilder()
- .POST(HttpRequest.BodyPublishers.ofString("Hello World"))
+ .POST(HttpRequest.BodyPublishers.ofString(message))
.uri(URI.create(hostName + "/mytopic"))
.build();📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||
| //Todo: handle long blocking send requests to not freeze the JavaFX thread | ||||||||||||||||||||||||||
| //1. Use thread send message? | ||||||||||||||||||||||||||
| //2. Use async? | ||||||||||||||||||||||||||
| var response = http.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofString()) | ||||||||||||||||||||||||||
| .orTimeout(5, java.util.concurrent.TimeUnit.SECONDS) | ||||||||||||||||||||||||||
| .join(); | ||||||||||||||||||||||||||
| if (response.statusCode() != 200) { | ||||||||||||||||||||||||||
| System.err.println("Failed to send message. HTTP Status: " + response.statusCode()); | ||||||||||||||||||||||||||
| System.err.println("Response body: " + response.body()); | ||||||||||||||||||||||||||
| return false; | ||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||
| return true; | ||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| @Override | ||||||||||||||||||||||||||
| public void receiveMessage(Consumer<NtfyMessageDto> messageHandler) { | ||||||||||||||||||||||||||
| HttpRequest httpRequest = HttpRequest.newBuilder() | ||||||||||||||||||||||||||
| .GET() | ||||||||||||||||||||||||||
| .uri(URI.create(hostName + "/mytopic/json")) | ||||||||||||||||||||||||||
| .build(); | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| http.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofLines()) | ||||||||||||||||||||||||||
| .thenAccept(response -> { | ||||||||||||||||||||||||||
| if (response.statusCode() != 200) { | ||||||||||||||||||||||||||
| System.err.println("Error connecting to stream. HTTP Status: " + response.statusCode()); | ||||||||||||||||||||||||||
| return; | ||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||
| response.body() | ||||||||||||||||||||||||||
| .map(s -> { | ||||||||||||||||||||||||||
| try { | ||||||||||||||||||||||||||
| return mapper.readValue(s, NtfyMessageDto.class); | ||||||||||||||||||||||||||
| } catch (Exception e) { | ||||||||||||||||||||||||||
| System.err.println("Failed to parse JSON: " + e.getMessage()); | ||||||||||||||||||||||||||
| return null; | ||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||
| }) | ||||||||||||||||||||||||||
| .filter(Objects::nonNull) | ||||||||||||||||||||||||||
| .filter(message -> "message".equals(message.event())) | ||||||||||||||||||||||||||
| .peek(m -> { | ||||||||||||||||||||||||||
| var time = java.time.Instant.ofEpochSecond(m.time()) | ||||||||||||||||||||||||||
| .atZone(java.time.ZoneId.systemDefault()) | ||||||||||||||||||||||||||
| .toLocalTime(); | ||||||||||||||||||||||||||
| System.out.println(time + " " + m.message()); | ||||||||||||||||||||||||||
| }) | ||||||||||||||||||||||||||
| .forEach(messageHandler); | ||||||||||||||||||||||||||
| }).exceptionally(e -> { | ||||||||||||||||||||||||||
| System.err.println("Async connection error: " + e.getMessage()); | ||||||||||||||||||||||||||
| e.printStackTrace(); | ||||||||||||||||||||||||||
| return null; | ||||||||||||||||||||||||||
| }); | ||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| package com.example; | ||
|
|
||
| import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | ||
|
|
||
| @JsonIgnoreProperties(ignoreUnknown = true) | ||
| public record NtfyMessageDto(String id, long time, String event, String topic, String message){} |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -1,6 +1,10 @@ | ||||||
| module hellofx { | ||||||
| requires javafx.controls; | ||||||
| requires javafx.fxml; | ||||||
| requires io.github.cdimascio.dotenv.java; | ||||||
| requires java.net.http; | ||||||
| requires tools.jackson.databind; | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Update module name after fixing Jackson dependency. This module name corresponds to the incorrect Jackson group ID in - requires tools.jackson.databind;
+ requires com.fasterxml.jackson.databind;📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||
| requires javafx.graphics; | ||||||
|
|
||||||
| opens com.example to javafx.fxml; | ||||||
| exports com.example; | ||||||
|
|
||||||
Uh oh!
There was an error while loading. Please reload this page.