Xaxxis Xaxxis - 2 months ago 18
Java Question

Can't show username on javaFx dashboard view

i want to access method getUsername for username profile on dashboard from userField to view after login. but method make some error after login on Login controller. Thankss

MainApp

public class MainApp extends Application {
@Override
public void start(Stage primaryStage) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("/view/Login.fxml"));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.setMaximized(false);
primaryStage.setMinHeight(500.0);
primaryStage.initStyle(StageStyle.UNDECORATED);
primaryStage.show();
}

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

}


}

LoginController

public class LoginController implements Initializable {
public MLogin loginModel = new MLogin();
@FXML
private Label status;
@FXML
private JFXTextField userField;
@FXML
private JFXPasswordField passField;

@Override
public void initialize(URL location, ResourceBundle resources) {
}
@FXML
public void Login (ActionEvent event) throws IOException {

try {
if (loginModel.isLogin(userField.getText(), passField.getText())) {

((Node)event.getSource()).getScene().getWindow().hide();
Stage primaryStage = new Stage();
FXMLLoader fxmlLoader = new FXMLLoader();
Parent root = fxmlLoader.load(getClass().getResource("/view/App.fxml").openStream());
AppController appCtrl = (AppController)fxmlLoader.getController();
appCtrl.GetUser(userField.getText());
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.setMaximized(false);
primaryStage.show();

} else {
status.setText("Username atau password anda salah");
}
} catch (SQLException e) {
status.setText("Username atau password anda salah");
} catch(IOException e) {
e.printStackTrace();
}
}
@FXML
private void Close(javafx.event.ActionEvent event) {
Platform.exit();
System.exit(0);
}


}

Login model

public class MLogin {
Connection conection;
public MLogin() {
conection = Connections.Mysql();
if(conection == null) {
System.exit(1);
}
}

public boolean isDbConnected() {
try {
return !conection.isClosed();
} catch (SQLException e) {
return false;
}
}

public boolean isLogin(String username, String password) throws SQLException {
PreparedStatement ps = null;
ResultSet rs = null;
String query = "select * from users where username = ? and password = ?";
try {
ps = conection.prepareStatement(query);
ps.setString(1, username);
ps.setString(2, password);

rs = ps.executeQuery();
if (rs.next()) {
return true;
}
else {
return false;
}
} catch (Exception e) {
return false;
} finally {
ps.close();
rs.close();
}


}
}

Login FXML

<?xml version="1.0" encoding="UTF-8"?>
<?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXPasswordField?>
<?import com.jfoenix.controls.JFXTextField?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>

<AnchorPane fx:id="loginBg" prefHeight="620.0" prefWidth="989.0" stylesheets="@../styles/mainStyle.css" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.xaxxis.controller.LoginController">
<children>
<HBox alignment="CENTER" prefHeight="535.0" prefWidth="760.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<VBox alignment="CENTER" prefHeight="620.0" prefWidth="726.0">
<children>
<AnchorPane prefHeight="384.0" prefWidth="668.0">
<children>
<Label layoutX="32.0" layoutY="34.0" prefHeight="55.0" prefWidth="283.0" text="Xaxxis Project" textFill="#eeebeb">
<font>
<Font size="40.0" />
</font>
</Label>
<Label layoutX="32.0" layoutY="80.0" text="Manda Putra System Information" textFill="#e8e6e6">
<font>
<Font size="21.0" />
</font>
</Label>
<AnchorPane layoutX="410.0" layoutY="44.0" prefHeight="296.0" prefWidth="273.0" style="-fx-background-color: #050f1a;" styleClass="loginPane" AnchorPane.bottomAnchor="40.0" AnchorPane.rightAnchor="40.0" AnchorPane.topAnchor="40.0">
<children>
<GridPane layoutY="108.0" prefHeight="89.0" prefWidth="273.0" AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="100.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="242.218994140625" minWidth="10.0" prefWidth="139.78271484375" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="141.17401123046875" minWidth="10.0" prefWidth="133.21728515625" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<JFXTextField fx:id="userField" alignment="CENTER" focusColor="#0b9bd7" labelFloat="true" maxWidth="253.0" minWidth="253.0" prefHeight="33.0" prefWidth="253.0" promptText="Username" unFocusColor="#f8f6f6" />
<JFXPasswordField fx:id="passField" focusColor="#0b9bd7" labelFloat="true" maxWidth="253.0" minWidth="253.0" prefHeight="33.0" prefWidth="253.0" promptText="Password" unFocusColor="#fcfcfc" GridPane.rowIndex="1" />
</children>
</GridPane>
<JFXButton buttonType="RAISED" layoutX="38.0" layoutY="210.0" onAction="#Login" prefHeight="33.0" prefWidth="88.0" ripplerFill="#d3cbcb" style="-fx-background-color: #0B9BD7;" text="Login" AnchorPane.leftAnchor="38.0" />
<Label layoutX="16.0" layoutY="34.0" prefHeight="33.0" prefWidth="198.0" text="Login to System" textFill="#f5f5f5">
<font>
<Font size="25.0" />
</font>
</Label>
<Label layoutX="17.0" layoutY="63.0" prefHeight="14.0" prefWidth="249.0" text="Enter your username and password to log on:" textFill="WHITESMOKE">
<font>
<Font size="11.0" />
</font>
</Label>
<JFXButton buttonType="RAISED" layoutX="147.0" layoutY="210.0" onAction="#Close" prefHeight="33.0" prefWidth="88.0" ripplerFill="#d3cbcb" style="-fx-background-color: #0B9BD7;" text="Cancel" AnchorPane.rightAnchor="38.0" />
<Label fx:id="status" layoutX="7.0" layoutY="267.0" prefHeight="19.0" prefWidth="250.0" textFill="#fc0d0d" AnchorPane.bottomAnchor="18.0" AnchorPane.leftAnchor="5.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="267.0" />
<ImageView fitHeight="46.0" fitWidth="37.0" layoutX="215.0" layoutY="15.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../icon/lock.png" />
</image>
</ImageView>
<Text fill="#fcfafa" layoutX="21.0" layoutY="37.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Welcome" wrappingWidth="102.99127197265625">
<font>
<Font size="14.0" />
</font>
</Text>
</children>
</AnchorPane>
<ImageView fitHeight="197.0" fitWidth="196.0" layoutX="103.0" layoutY="116.0" pickOnBounds="true" preserveRatio="true" rotate="47.7">
<image>
<Image url="@../images/rocket.gif" />
</image>
</ImageView>
</children></AnchorPane>
<Label text="Copyright by Zaki Ibrahim" textFill="#eee8e8">
<font>
<Font size="16.0" />
</font>
</Label>
</children>
</VBox>
</children>
</HBox>
</children>
</AnchorPane>


AppControler

public class AppController implements Initializable {

@FXML
private Label userLabel;

@FXML
private MenuButton userAcc;

@Override
public void initialize(URL location, ResourceBundle resources) {
}
public void GetUser(String user) {
// TODO
userLabel.setText(user);
}
}


App FXML

<?xml version="1.0" encoding="UTF-8"?>
<?import com.jfoenix.controls.JFXButton?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.MenuButton?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.Separator?>
<?import javafx.scene.control.ToggleButton?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.shape.Circle?>
<?import javafx.scene.text.Font?>

<AnchorPane prefHeight="593.0" prefWidth="900.0" stylesheets="@../styles/Application.css" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.xaxxis.controller.AppController">
<children>
<StackPane prefHeight="593.0" prefWidth="767.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<BorderPane prefHeight="400.0" prefWidth="600.0">
<left>
<AnchorPane fx:id="headerLine" prefHeight="593.0" prefWidth="229.0">
<children>
<ScrollPane layoutY="43.0" prefHeight="534.0" prefViewportHeight="678.0" prefViewportWidth="128.0" prefWidth="193.0" translateX="1.0" translateY="1.0" translateZ="1.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="-1.0" AnchorPane.rightAnchor="1.0" AnchorPane.topAnchor="59.0">
<content>
<AnchorPane prefHeight="534.0" prefWidth="225.0">
<children>
<MenuButton fx:id="usrAcc" mnemonicParsing="false" prefHeight="79.0" prefWidth="225.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="-4.0" AnchorPane.topAnchor="0.0">
<items>
<MenuItem mnemonicParsing="false">
<graphic>
<AnchorPane prefHeight="140.0" prefWidth="140.0">
<children>
<Circle fill="DODGERBLUE" layoutX="55.0" layoutY="100.0" radius="45.0" stroke="BLACK" strokeType="INSIDE" AnchorPane.topAnchor="0.0" />
<Label text="User Profile" AnchorPane.leftAnchor="110.0" AnchorPane.topAnchor="0.0">
<font>
<Font name="System Bold" size="19.0" />
</font>
</Label>
<Label fx:id="userLabel" text="Username" AnchorPane.leftAnchor="110.0" AnchorPane.topAnchor="25.0" />
<JFXButton buttonType="RAISED" style="-fx-background-color: #373737;" text="Logout.." textFill="#fcfafa" AnchorPane.leftAnchor="22.0" AnchorPane.topAnchor="100.0" />
</children>
</AnchorPane>
</graphic>
</MenuItem>
</items>
<graphic>
<AnchorPane prefHeight="53.0" prefWidth="175.0">
<children>
<Circle fill="DODGERBLUE" layoutX="28.0" layoutY="33.0" radius="30.0" stroke="BLACK" strokeType="INSIDE" />
<Label fx:id="userLabel" layoutX="61.0" layoutY="3.0" prefHeight="25.0" prefWidth="101.0" text="Username" textFill="#f8f8f8">
<font>
<Font name="System Bold" size="17.0" />
</font>
</Label>
<Label layoutX="62.0" layoutY="23.0" prefHeight="15.0" prefWidth="43.0" text="Online" textFill="#0f832e" underline="true" />
</children>
</AnchorPane>
</graphic>
</MenuButton>
<Separator layoutY="78.0" prefHeight="3.0" prefWidth="226.0" />
<JFXButton alignment="BASELINE_LEFT" graphicTextGap="8.0" layoutX="-1.0" layoutY="82.0" prefHeight="50.0" prefWidth="227.0" ripplerFill="#2aa0e7" style="-fx-background-color: TRANSPARENT;" text="Home" textFill="#f5f5f5">
<font>
<Font size="21.0" />
</font>
<graphic>
<ImageView fitHeight="36.0" fitWidth="52.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../icon/computer.png" />
</image>
</ImageView>
</graphic></JFXButton>
<JFXButton alignment="BASELINE_LEFT" graphicTextGap="13.0" layoutX="-1.0" layoutY="125.0" prefHeight="50.0" prefWidth="227.0" style="-fx-background-color: TRANSPARENT;" text="Purchasing" textFill="#f5f5f5">
<font>
<Font size="21.0" />
</font>
<graphic>
<ImageView fitHeight="36.0" fitWidth="52.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../icon/purchase.png" />
</image>
</ImageView>
</graphic>
</JFXButton>
<JFXButton alignment="BASELINE_LEFT" graphicTextGap="13.0" layoutY="174.0" prefHeight="50.0" prefWidth="227.0" style="-fx-background-color: TRANSPARENT;" text="Opname" textFill="#f5f5f5">
<font>
<Font size="21.0" />
</font>
<graphic>
<ImageView fitHeight="36.0" fitWidth="52.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../icon/opname.png" />
</image>
</ImageView>
</graphic>
</JFXButton>
</children></AnchorPane>
</content>
</ScrollPane>
<GridPane prefHeight="60.0" prefWidth="229.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="110.31568145751953" minWidth="10.0" prefWidth="64.64358520507812" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="164.35641479492188" minWidth="10.0" prefWidth="164.35641479492188" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<HBox prefHeight="100.0" prefWidth="200.0">
<children>
<ToggleButton fx:id="sideMenuBtn" mnemonicParsing="false" prefHeight="41.0" prefWidth="43.0" translateX="5.0" translateY="5.0">
<graphic>
<ImageView fitHeight="38.0" fitWidth="36.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../icon/3%20bar.png" />
</image>
</ImageView>
</graphic>
</ToggleButton>
</children>
</HBox>
</children>
</GridPane>
</children>
</AnchorPane>
</left>
<center>
<BorderPane prefHeight="593.0" prefWidth="565.0" BorderPane.alignment="CENTER">
<top>
<AnchorPane prefHeight="60.0" prefWidth="538.0" style="-fx-background-color: #FFFFFF;" BorderPane.alignment="CENTER">
<children>
<GridPane prefHeight="60.0" prefWidth="538.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
</GridPane>
</children>
</AnchorPane>
</top>
</BorderPane>
</center>
</BorderPane>
</children>
</StackPane>
</children>
</AnchorPane>


My error:

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2425)
at com.xaxxis.controller.LoginController.Login(LoginController.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8411)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:380)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:416)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
Caused by: java.lang.IllegalArgumentException: Invalid URL: Invalid URL or resource not found
at javafx.scene.image.Image.validateUrl(Image.java:1118)
at javafx.scene.image.Image.<init>(Image.java:693)
at com.sun.javafx.fxml.builder.JavaFXImageBuilder.build(JavaFXImageBuilder.java:47)
at com.sun.javafx.fxml.builder.JavaFXImageBuilder.build(JavaFXImageBuilder.java:37)
at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:763)
at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2823)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2532)
... 57 more
Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found
at javafx.scene.image.Image.validateUrl(Image.java:1110)
... 63 more


on Line 57 Login Controller

Parent root = fxmlLoader.load(getClass().getResource("/view/App.fxml").openStream());

Answer

You are trying to use location resolution to load the image:

<Image url="@../icon/computer.png" />

This will only work if the FXMLLoader has a location set. However, since you use the load(...) method taking an input stream, and never specify the location, the FXMLLoader cannot resolve locations relative to the location of the FXML file (as far as the loader is concerned, there may not even be a file if you do things this way).

So instead, specify the location and use the no-argument load() method:

FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(getClass().getResource("/view/App.fxml"));
Parent root = fxmlLoader.load();

Note that you can also abbreviate the first two lines to

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/view/App.fxml"));