I'm creating a rudimentary browser in Java. (just to see if I can) Right now, I have basic browsing functionality, and I'm trying to use TabPane to create a tab system. However, when I try to run the program, it stops and says a NullPointerException is triggered by the part where I set my tabs. However, I can't for the life of me figure out what to do to fix it. I am using IntelliJ-Idea. The section of code which triggers it is below:
stage.setTitle("Dodge Browser");
stage.setWidth(1024);
stage.setHeight(768);
WebView browser[] = new WebView[5];
//WebEngine webEngine = browser.getEngine();
Scene scene = new Scene(new Group());
VBox root = new VBox();
HBox url_layout = new HBox();
TabPane tabs = new TabPane();
Tab[] tab = new Tab[5];
for(int i = 0; i < tab.length; i++){
tab[i].setText("Tab"); // this is where the IDLE tells me the error stems from
tabs.getTabs().add(tab[i]);
tab[i].setContent(browser[i]);
}
The full code is below if you want it:
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.TabPane;
import javafx.scene.control.Hyperlink;
import javafx.scene.layout.VBox;
import javafx.scene.layout.HBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import javafx.scene.control.TextField;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.control.Tab;
import javafx.concurrent.Worker.State;
import java.awt.*;
public class browser_tabs extends Application {
static String toGo = "http://www.google.com";
@Override
public void start(Stage stage) {
stage.setTitle("Dodge Browser");
stage.setWidth(1024);
stage.setHeight(768);
WebView browser[] = new WebView[5];
//WebEngine webEngine = browser.getEngine();
Scene scene = new Scene(new Group());
VBox root = new VBox();
HBox url_layout = new HBox();
TabPane tabs = new TabPane();
Tab[] tab = new Tab[5];
for(int i = 0; i < tab.length; i++){
tab[i].setText("Tab");
tabs.getTabs().add(tab[i]);
tab[i].setContent(browser[i]);
}
Button go = new Button("Go");
TextField url = new TextField();
url.setPrefWidth(500);
browser[currentSelection(tab)].getEngine().load(toGo);
go.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
String newAddress = url.getText();
browser[currentSelection(tab)].getEngine().load(newAddress);
}
});
browser[currentSelection(tab)].getEngine().getLoadWorker().stateProperty().addListener(
new ChangeListener<State>() {
@Override
public void changed(ObservableValue<? extends State> observable, State oldValue, State newValue) {
url.setText(browser[currentSelection(tab)].getEngine().getLocation());
}
}
);
url_layout.getChildren().addAll(url, go);
url_layout.setSpacing(10);
root.getChildren().addAll(url_layout,tabs);
scene.setRoot(root);
stage.setScene(scene);
stage.show();
}
static int currentSelection(Tab[] tab){
for(int i = 0; i < tab.length; i++){
if(tab[i].isSelected()){
return i;
}
}
return -1;
}
public static void main(String[] args) {
launch(args);
}
}