Javafx 11, jdk11 Stage is blank after running

Answered

Like the title says: https://prnt.sc/q7zpw8

This only happened after i updated IntelliJ on Saturday, I tried it with a new Project, which gives me the window above:

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Insets;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.FlowPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class Main extends Application {
FlowPane ToolPane2;

@Override
public void start(Stage primaryStage) throws Exception{

Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 1000, 1000));
primaryStage.show();

ToolPane2 = new FlowPane();
// ToolPane2.relocate(600, 0);
ToolPane2.setBackground(new Background(new BackgroundFill(Color.LIGHTGRAY, new CornerRadii(0), new Insets(0))));
ToolPane2.setPrefWrapLength(250);
ToolPane2.setPrefHeight(800);

//A button with an empty text caption.
Button button1 = new Button();
//A button with the specified text caption.
Button button2 = new Button("Accept");
//A button with the specified text caption and icon.
}


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

 

I also tried with a Project which previously worked but doesnt anymore for some reason, gives me the same blank window(different size).

package sample;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.*;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.image.*;
import javafx.scene.image.Image;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javafx.scene.control.Button;

import java.io.File;

public class Main extends Application {
FlowPane ToolPane;
FlowPane ToolPane2;
FlowPane ToolPane3;
Pane DrawPane;
Group root;
Button Btn;
Image image;
ImageView ImageView;
//Button IncreaseRed;
Slider sliderR, sliderB, sliderG;
WritableImage changedImage;
Label RotText, GrünText, BlauText;

CategoryAxis rxAxis, bxAxis, gxAxis, lxAxis;
NumberAxis ryAxis, byAxis, gyAxis, lyAxis;
BarChart <String, Number> rChart, bChart, gChart, lChart;

// zweidimensionale Arrays
// funktionieren wie eine Tabelle, [Wieviele Spalten: Wieviele FarbWerte von 0-255]
// [Wieviele Zeilen: Beinhaltet, wie oft welcher FarbWert vorkommt]
int RedValue[][] = new int [256][2];
int BlueValue [][] = new int [256][2];
int GreenValue [][] = new int [256][2];

double LuminanzValue [][]= new double [256][2];

@Override
public void start(Stage primaryStage) throws Exception{
System.out.println ("hi");

ToolPane = new FlowPane();
ToolPane2 = new FlowPane();
ToolPane3 = new FlowPane();
DrawPane = new Pane();
root = new Group();
ImageView = new ImageView();

ToolPane.setPrefWrapLength(150);
ToolPane.setPrefHeight(800);
ToolPane.setBackground(new Background(new BackgroundFill(Color.LIGHTGRAY, new CornerRadii (0), new Insets(0))));

DrawPane.relocate(200, 0);
DrawPane.getChildren().add(ImageView);

ToolPane2.relocate(600, 0);
ToolPane2.setBackground(new Background(new BackgroundFill(Color.LIGHTGRAY, new CornerRadii (0), new Insets(0))));
ToolPane2.setPrefWrapLength(250);
ToolPane2.setPrefHeight(800);

ToolPane3.relocate (1150, 0);

Btn = new Button();
Btn.setText("Load image");
DrawPane.getChildren().add (Btn);

Btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
FileChooser fe = new FileChooser();
File file = fe.showOpenDialog (primaryStage);

if (file != null){
image = new Image (file.toURI().toString());
ImageView.setImage (image);
}
}
});

/* IncreaseRed = new Button ("Increase Red");
IncreaseRed.setOnAction (new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {
FilterImage();
}

});*/

sliderR = new Slider();
sliderR.setMax (127);
sliderR.setMin (0);
sliderR.setValue (0);

sliderB = new Slider();
sliderB.setMax (127);
sliderB.setMin (0);
sliderB.setValue (0);

sliderG = new Slider();
sliderG.setMax (127);
sliderG.setMin (0);
sliderG.setValue (0);

RotText = new Label();
GrünText = new Label();
BlauText = new Label();
RotText.setText("Rot");
GrünText.setText("Grün");
BlauText.setText("Blau");

sliderR.valueProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number t1) {
FilterImage();
}
});

sliderB.valueProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number t1) {
FilterImage();
}
});

sliderG.valueProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number t1) {
FilterImage();
}
});

//Charts
//Jeweils 1-255 zugeordnet
for (int i = 0; i < 256; i++){
RedValue [i][0] = i;
}

for (int i = 0; i < 256; i++){
BlueValue [i][0] = i;
}

for (int i = 0; i < 256; i++){
GreenValue [i][0] = i;
}

for (int i = 0; i < 256; i++){
LuminanzValue [i][0] = i;
}

// rotes Histogram
rxAxis = new CategoryAxis();
ryAxis = new NumberAxis ();
rxAxis.setLabel("Wert");
ryAxis.setLabel("Häufigkeit");
rChart = new BarChart <String, Number> (rxAxis, ryAxis);
rChart.setTitle("Rot");
//ToolPane2.getChildren().add(rChart);

rChart.setCategoryGap(0);
rChart.setBarGap(0);
rChart.setMaxWidth(350);
rChart.setMaxHeight(250);
rChart.setLegendVisible(false);
rxAxis.setTickLabelsVisible(false);

// blaues Histogram
bxAxis = new CategoryAxis();
byAxis = new NumberAxis ();
bxAxis.setLabel("Wert");
byAxis.setLabel("Häufigkeit");
bChart = new BarChart <String, Number> (bxAxis, byAxis);
bChart.setTitle("Blau");

//ToolPane2.getChildren().add(bChart);
bChart.setCategoryGap(0);
bChart.setBarGap(0);
bChart.setMaxWidth(350);
bChart.setMaxHeight(250);
bChart.setLegendVisible(false);
bxAxis.setTickLabelsVisible(false);

// grünes Histogram
gxAxis = new CategoryAxis();
gyAxis = new NumberAxis ();
gxAxis.setLabel("Wert");
gyAxis.setLabel("Häufigkeit");
gChart = new BarChart <String, Number> (gxAxis,gyAxis);
gChart.setTitle("Grün");

//ToolPane2.getChildren().add(gChart);
gChart.setCategoryGap(0);
gChart.setBarGap(0);
gChart.setMaxWidth(350);
gChart.setMaxHeight(250);
gChart.setLegendVisible(false);
gxAxis.setTickLabelsVisible(false);

// Luminanz Histogram
lxAxis = new CategoryAxis();
lyAxis = new NumberAxis ();
lxAxis.setLabel("Wert");
lyAxis.setLabel("Häufigkeit");
lChart = new BarChart <String, Number> (lxAxis,lyAxis);
lChart.setTitle("Luminanz");

lChart.setCategoryGap(0);
lChart.setBarGap(0);
lChart.setMaxWidth(250);
lChart.setMaxHeight(250);
lChart.setLegendVisible(false);
lxAxis.setTickLabelsVisible(false);

//ToolPane.getChildren().add (IncreaseRed);
ToolPane.getChildren().addAll(RotText, sliderR, BlauText, sliderB, GrünText, sliderG);
ToolPane2.getChildren().addAll (rChart, bChart, gChart);
ToolPane3.getChildren().add(lChart);

Scene scene = new Scene(root, 1400, 800);
primaryStage.setScene(scene);
primaryStage.show();
}

private void FilterImage(){
// Pixel in Bild verändern
changedImage = new WritableImage ((int) image.getWidth(), (int)image.getHeight());
PixelReader preader = image.getPixelReader();
PixelWriter pwriter = changedImage.getPixelWriter();

//Daten werden resettet, da neues Bild (sonst bleibt der BarChart "stehen" oder addiert die Werte)
for(int i = 0; i < 256; i++){
RedValue [i][1] = 0;
}

for(int i = 0; i < 256; i++){
BlueValue [i][1] = 0;
}

for(int i = 0; i < 256; i++){
GreenValue [i][1] = 0;
}

for(int i = 0; i < 256; i++){
LuminanzValue[i][1] = 0;
}

lChart.getData().clear();
rChart.getData().clear();
bChart.getData().clear();
gChart.getData().clear();

//Bild wird Pixel für Pixel durchgegangen
for (int x = 0; x < image.getWidth(); x++){
for (int y = 0; y < image.getHeight(); y++){
// liest Farbe aus aktuellem Pixel + wandelts in ein 32 Bit int
// Maske schneidet Alpha weg (da addiert wird: 1 + 1 = 1, 1 + 0 = 0, 0 + 0 = 0)
// Alles nach & ist die Maske
int myRGB = preader.getArgb(x, y);
int red = (myRGB >> 16) & 0xFF;
int green = (myRGB >> 8) & 0xFF;
int blue = myRGB & 0xFF;

//rechnet Pixelfarbe + Slidervalue
red += (int) sliderR.getValue();
if (red > 255) {
red = 255;
} else if (red < 0) {
red = 0;
}

blue += (int) sliderB.getValue();
if (blue > 255) {
blue = 255;
} else if (blue < 0) {
blue = 0;
}

green += (int) sliderG.getValue();
if (green > 255) {
green = 255;
} else if (green < 0) {
green = 0;
}

// Anzahl der Farbwerte wird hochgerechnet
// rechnet in Zeile 2 die Anzahl hoch, je nachdem wie oft ein Wert (0 - 255) im Bild vorkommt
RedValue [red][1] += 1;
BlueValue [blue][1] += 1;
GreenValue [green][1] += 1;


// Farb integer 32 Bit zusammensetzen
int newRGB = 0xFF000000 | (red << 16) | (green << 8) | blue;
// neue Farbe setzen
pwriter.setArgb (x, y, newRGB);
}

}

for(int i = 0; i < 256; i++){
LuminanzValue[i][1] = ((RedValue [i][1] * 0.299) + (GreenValue [i][1] * 0.587) + (BlueValue [i][1] * 0.114));
}

// Rotes Histogram: Daten werden sichtbar gemacht
// Series werden erstellt (Set an Daten, Zahlen)
XYChart.Series <String, Number> Rot = new XYChart.Series<>();
// Daten werden zugeordnet
for (int i = 0; i < 256; i++) {
// geht das Array durch und fügt Daten der Series dem BarChart hinzu (für den BarChart "verständlich")
Rot.getData().add(new XYChart.Data <String, Number> (Integer.toString(RedValue [i][0]), RedValue [i][1]));
}
// Daten werden ans BarChart hinzugefügt
rChart.getData().add(Rot);

XYChart.Series <String, Number> Blau = new XYChart.Series<>();
for (int i = 0; i < 256; i++) {
Blau.getData().add(new XYChart.Data <String, Number> (Integer.toString(BlueValue [i][0]), BlueValue[i][1]));
}
bChart.getData().add(Blau);

XYChart.Series <String, Number> Gruen = new XYChart.Series<>();
for (int i = 0; i < 256; i++) {
Gruen.getData().add(new XYChart.Data <String, Number> (Integer.toString(GreenValue [i][0]), GreenValue[i][1]));
}
gChart.getData().add(Gruen);

XYChart.Series <String, Number> Luminanz = new XYChart.Series<>();
for (int i = 0; i < 256; i++) {
Luminanz.getData().add(new XYChart.Data <String, Number> (Double.toString(LuminanzValue[i][0]), LuminanzValue[i][1]));
}
lChart.getData().add(Luminanz);


ImageView.setImage (changedImage);
}


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

Both Projects run without giving me any errors or stuff i could look for.

Please help!

 

Thanks

 

0
7 comments

Try to reinstall JDK and JavaFX per https://www.jetbrains.com/help/idea/2019.3/javafx.html and https://openjfx.io/openjfx-docs/ .

Upload the project if the issue persists, specify the Java/JavaFX versions you are using: https://uploads.services.jetbrains.com/ .

0
Avatar
Permanently deleted user

I reinstalled and tried with different JDK and javaFX versions. At the moment im using JDK 11.0.5 and Javafx 11.0.2, i also tried to completely reinstall intellij with the previous version, doesnt work either.

I uploaded both projects, do you need the link to it?

thanks

 

0

Did you try JavaFX 12 or 13? Can you reproduce it on any other machine?

0
Avatar
Permanently deleted user

I tried it with Javafx 11.0.2,13.0.1,14, im on Win10, my Mac(catalina) also only produces blank windows

0

I've checked your Test project and the form doesn't contain any components, you also don't add any buttons to the form, so the form is blank by design (sample.fxml).

Another issue is that you are using JavaFX 11.0.2, while in the VM Options of the Main run/debug configuration you are referencing JavaFX 14. 

0
Avatar
Permanently deleted user

Yes sorry, Test works after trying around, the other Project still doesnt without any error, and the same settings as Test, without throwing any errors, even tough it worked before, and i cant really figoure out why, since the scene is set, anything i need is added to the scene etc., and as i said it just stopped working after updating?

I changed everything in the 2nd project so it lines up - vm config, libraries/sdk etc, and im using javafx13 and jdk 11.0.5, and it still just shows a white blank window.

0

Are you sure it's IDE update related? If so, you should be able to get the previous version from https://www.jetbrains.com/idea/download/previous.html and it will start working? Please confirm.

0

Please sign in to leave a comment.