Идеи о том, что может отсутствовать или если моя идея просто не сработает?
Код: Выделить всё
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
WebView webView = new WebView();
WebEngine webEngine = webView.getEngine();
webEngine.setOnError(event -> LOGGER.warning("[Frontend] An error occured on the frontend: " + event.getMessage()));
File htmlFile = new File(getClass().getResource("/html/index.html").getFile());
webEngine.load(htmlFile.toURI().toString());
webEngine.setJavaScriptEnabled(true);
// Wait until WebView is fully loaded before injecting WeaknessController
webEngine.getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> {
if (newState == javafx.concurrent.Worker.State.SUCCEEDED) {
JSObject window = (JSObject) webEngine.executeScript("window");
window.setMember("fileController", FileController.getInstance());
window.setMember("weaknessController", WeaknessController.getInstance());
window.setMember("vulnerabilityController", VulnerabilityController.getInstance());
window.setMember("fileReader", FileReaderUtility.getInstance());
// TODO: remove later - just for debugging purposes
window.setMember("javaConsole", new JSConsoleBridge());
webEngine.executeScript("""
console.log = function(msg) {
javaConsole.log(msg);
};
console.error = function(msg) {
javaConsole.error(msg);
};
""");
}
});
StackPane root = new StackPane(webView);
Scene scene = new Scene(root, 1500, 900);
stage.setScene(scene);
stage.setTitle("Sage UI");
stage.getIcons().add(new Image(getClass().getResourceAsStream("/logos/taskbar_icon.png")));
stage.show();
}
< /code>
function processFile() {
let filePath = window.fileReader.getFilePath();
console.log("Processing file called");
if (filePath) {
const result = JSON.parse(window.fileController.process(filePath));
console.log(result)
displayStatistics(result);
} else {
console.log(filePath);
}
}
function displayStatistics(statistics) {
console.log(statistics);
let statisticsList = document.getElementById("statistics");
statisticsList.innerHTML = "";
statistics.forEach(severity => {
let li = document.createElement("li");
li.textContent = `${severity.key} ${severity.value}`
statisticsList.appendChild(li);
});
}
function fetchAllVulnerabilities() {
const vulnerabilities = JSON.parse(window.fileController.fetchAllVulnerabilities());
updateList(vulnerabilities);
}
function updateList(entities) {
console.log(entities);
let entityList = document.getElementById("list");
entityList.innerHTML = "";
entities.forEach(entity => {
let li = document.createElement("li");
li.textContent = `${entity.name}`;
entityList.appendChild(li);
});
}
function fetchWeakness(id) {
let list = document.getElementById("weaknessList");
const weakness = JSON.parse(window.weaknessController.fetchById(id));
// TODO: implement
}
< /code>
SAGE UI
[*]
SAGE
Dashboard
[list][/list]
[img]../icons/add-document.png[/img]
Select File
Fetch
Choose File
[list]
List Item 1
[*]List Item 2
[*]List Item 3
[*]List Item 4
[*]List Item 5
[*]List Item 7
[/list]
Vulnerabilities
< /code>
PS: calling processFile()edit после @james_d 'sment:
Код: Выделить всё
class FileController {
private static FileController instance;
private static FileService fileService;
private static VulnerabilityService vulnerabilityService;
private FileController() {
fileService = new FileService();
vulnerabilityService = new VulnerabilityService();
}
public static FileController getInstance() {
if (instance == null)
instance = new FileController();
return instance;
}
public String process(String filePath) {
if (fileService.processFile(filePath))
return JsonParser.asJsonString(vulnerabilityService.getStatistics());
LOGGER.severe(String.format("[FileController] Failed to process SAST-Report-File: %s", filePath));
throw new InternalError("File: " + filePath + " could not be processed\n");
}
// ...
}
< /code>
I cant give you the whole implementation of what happens in the service class since this would just be too much here. But: basically, fileService.processFile(filePath)Я предполагаю, что это связано с асинхроной, потому что процесс издевательства (FilePath) с возвращением твердых кодировки будет работать нормально, и пользовательский интерфейс обновляется. Javafx - Может ли это уже мой ответ или я должен посмотреть, как синхронизировать пользовательский интерфейс и основные темы?
Подробнее здесь: https://stackoverflow.com/questions/796 ... javascript