Also in Kurzform läuft es so:
Ich habe eine JComponent Variable, die ich folgendermaßen initialisiere
NACHDEM das passiert ist, starte ich einen Thread, der wiederum eine andere statische Funktion aufruft, die dann auf das Panel in der JScrollPane des mainPanels zugreift, wobei dieses Panel dann plötzlich null sein soll...
Damit der Code halbwegs nachvollziehbar bleibt hab ich etwas mehr als nötig gepostet.
Aber die markierten Zeilen geben an, wie die Bewegung ist.
Also wieso bekomme ich in der letzten markierten Zeile eine NullPointer? Ist mir absolut unbegreiflich. Zumal in etwa 70% der Fälle, wenn ich das Programm starte geht alles gut und in den anderen 30% ist das Panel halt null...
Ich steig jedefalls nicht dahinter.
Der Scheduler kann doch nicht dafür verantwortlich sein oder? Immerhin wird die Variable initialisiert und dann erst der Thread gestartet...
Wäre super, wenn sich jemand gut genug mit der Materie auskennt hier. Ich bin jedenfalls am Ende mit meinen Javakenntnissen ^^°
Ich habe eine JComponent Variable, die ich folgendermaßen initialisiere
Java:
private static JComponent mainPanel;
...
public static void initializeMainPanel(){
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(0,2));
panel.setOpaque(false);
JScrollPane scroll = new JScrollPane(panel);
scroll.getVerticalScrollBar().setUnitIncrement(20);
scroll.setWheelScrollingEnabled(true);
scroll.setHorizontalScrollBarPolicy(
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scroll.setOpaque(false);
scroll.getViewport().setOpaque(false);
System.out.println(scroll.getViewport().getComponent(0));
setMainPanel(scroll); // -> mainPanel = scroll;
}
...
NACHDEM das passiert ist, starte ich einen Thread, der wiederum eine andere statische Funktion aufruft, die dann auf das Panel in der JScrollPane des mainPanels zugreift, wobei dieses Panel dann plötzlich null sein soll...
Java:
...
setMainPanel();
getWholeMovieList();
...
private static void getWholeMovieList(final int page){
Thread t = new Thread(){
@Override
public void run(){
for( int z = page;
z < ((page)*StaticGuiComponents.SHOWN_MOVIES)+
StaticGuiComponents.SHOWN_MOVIES &&
z < MovieList.getMovies().size()
; z++ )
{
MoviePanelSmall mps = (MoviePanelSmall)
Gui.getSmallMovieFrame(MovieList.getMovie(z));
if(mps != null){
-----------------> Gui.addMovieToMainPanel(MovieList.getMovie(z), -1);
MainFrameInstance.mainFrame.setVisible(true);
}
}
}
};
t.start();
}
public static void addMovieToMainPanel(Movie m, int index){
if(index >= 0){
JPanel panel = (JPanel) StaticGuiComponents.
getMainPanel().getComponent(0).getComponentAt(0,0);
if(panel.getComponentCount() < StaticGuiComponents.SHOWN_MOVIES){
panel.add(new MoviePanelSmall(m),index);
panel.setVisible(true);
panel.repaint();
}
}else{
JPanel panel = (JPanel) StaticGuiComponents.
getMainPanel().getComponent(0).getComponentAt(0,0);
------> if(panel.getComponentCount() < StaticGuiComponents.SHOWN_MOVIES){
panel.add(new MoviePanelSmall(m));
panel.setVisible(true);
panel.repaint();
}
}
Damit der Code halbwegs nachvollziehbar bleibt hab ich etwas mehr als nötig gepostet.
Aber die markierten Zeilen geben an, wie die Bewegung ist.
Also wieso bekomme ich in der letzten markierten Zeile eine NullPointer? Ist mir absolut unbegreiflich. Zumal in etwa 70% der Fälle, wenn ich das Programm starte geht alles gut und in den anderen 30% ist das Panel halt null...
Ich steig jedefalls nicht dahinter.
Der Scheduler kann doch nicht dafür verantwortlich sein oder? Immerhin wird die Variable initialisiert und dann erst der Thread gestartet...
Wäre super, wenn sich jemand gut genug mit der Materie auskennt hier. Ich bin jedenfalls am Ende mit meinen Javakenntnissen ^^°