setText()
benim açıklamalı etiketime start()
yönteminden çağrılmaya çalışıyorum. Benzer bir soru gördüm, ancak bu kişi için işe yaramadı sebebi, onun etiketinin açıklanmamış olmasına rağmen benimkidir.NullPointer nullPointer İstisnası her şey düzgün yüklenir ve açıklamalı
java.lang.NullPointerException
at io.github.blubdalegend.openbravery.OpenBravery.applyBuild(OpenBravery.java:67)
at io.github.blubdalegend.openbravery.OpenBravery.start(OpenBravery.java:58)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Bu benim ana sınıftır: Böyle
public class OpenBravery extends Application implements Initializable {
@FXML
private Button rerollButton;
@FXML
private Label champL;
public static void main(String[] args) {
System.out.println("Downloading files from Dropbox...");
updateFiles();
System.out.println("Download complete!");
Application.launch(OpenBravery.class, (java.lang.String[]) null);
}
@Override
public void initialize(URL location, ResourceBundle resources) {
rerollButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
}
});
}
private static void updateFiles() {
FileManager fm = new FileManager();
fm.downloadChamps();
fm.downloadItems();
}
@Override
public void start(Stage stage) {
try {
Pane pane = (Pane) FXMLLoader.load(OpenBravery.class.getResource("build.fxml"));
Scene scene = new Scene(pane);
stage.setScene(scene);
stage.setTitle("OpenBravery");
stage.setResizable(false);
applyBuild();
stage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
private void applyBuild() {
Build build = new Build();
champL.setText(build.getChamp());
}
}
Benim build.fxml başlar:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
minWidth="-Infinity" prefHeight="297.0" prefWidth="362.0"
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="io.github.blubdalegend.openbravery.OpenBravery">
<children>
<Label layoutX="14.0" layoutY="14.0" text="Your build:">
<font>
<Font size="32.0" />
</font>
</Label>
<Label fx:id="champL" layoutX="14.0" layoutY="61.0" prefHeight="32.0"
prefWidth="288.0" text="Label">
<font>
<Font size="17.0" />
</font>
</Label>
Yani burada neyi özledin?
'champL' muhtemelen hala boş mu? Başlatma emriyle bir ilgisi olabilir. –
build.fxml bulamadığından şüpheliyim çünkü setText() satırı olmadan çalıştırdığımda sadece pencereyi yaratır (etiketin metnini ayarlamadan açıkça). Başlatma siparişinden emin değil. – Blub
Garip, initialize() '' applyBuild() 'den önce çalıştırılmayacak mı? Eğer öyleyse, 'rerollButton' o zamana kadar boş değil. –