Problem mit unterschiedlichen Ladezeiten von Bildern / Blockieren der UI

dkr82

Mitglied
Hallo Leute, komme momentan bei meinem Rss-Reader-Applet nicht weiter, und hoffe ihr könnt mir ein paar Tipps geben. Prinzipiell funktioniert das Applet so wie es soll, es lädt über eine Parser-Klasse den Rss-Feed ein und zeigt die Daten dann im Applet an.

In meiner Entwicklungsumgebung Eclipse Indigo und im Browser auf meinem Entwicklungsrechner funktioniert das Applet wie gewünscht, auch das Einladen von ca. 30 kleinen Bildern dauert nicht länger als 10 Sekunden.

Auf einem anderen Rechner (selbe Java- und Browser-Version dauert das Laden der 30 Bilder aber ca. 7 Minuten!! 😱 ) Desweiteren ist während des Ladens die GUI nicht mehr bedienbar, obwohl ich das Laden der Bilder über die News-Parser Klasse mittlerweile über einen SwingWorker-Thread mache, und das eigentlich im Hintergrund geschehen sollte???

Wäre nett falls jemand einen Vorschlag für mich hätte?!?


Java:
public class Start extends JApplet {
	
	private static final long serialVersionUID = 1L;
	
	private JPanel panel;
	
	private FeedArray feed_array = new FeedArray();
	private FeedData actual_feed = new FeedData();
	private FeedUrls actual_feedurls = new FeedUrls();
	private Image 	 actual_image = null;
	
	private JTextPane 	ui_newstitle;
	private JTextField 	ui_category_text;
	private JTextField	ui_feedtime_text;
	private JLabel 		ui_newsimage;
	private JTextPane 	ui_newstext;
	private JLabel 		ui_control_display;
	private JScrollPane ui_newstext_scrollPane;
	
	private JLabel 		ui_button_nextfeed;
	private JLabel		ui_button_prevfeed;

	private boolean task_is_free=true;
	
	private GregorianCalendar feed_zeit,akt_zeit;
	private String actual_feedtime_string = "";
	
	
	ImageIcon loader_gif = new ImageIcon(this.getClass().getClassLoader().getResource("ajaxloader.gif"));
	ImageIcon pic,pic2;
	JFrame frame5 = new JFrame(); 
	JFrame frame2 = new JFrame();
	
	
	public Start() {
		
		
	}
	
	public class ControlListener implements MouseListener{

		@Override
		public void mouseClicked(MouseEvent arg0) {
			    
			    if(arg0.getComponent().equals(ui_button_nextfeed)
			      &&(Integer.parseInt(actual_feed.getFeedNumber())<feed_array.getFeedCount())){
			    	int i  = Integer.parseInt(actual_feed.getFeedNumber().trim());
			    	actual_feed=feed_array.getFeed().get(i+1);
			    	log("After: "+actual_feed.getFeedNumber());
			    	log("--> Nächsten Beitrag aufrufen "+(i+1));
			    	updateUI();
			    }
			     else {
			    	int i  = Integer.parseInt(actual_feed.getFeedNumber().trim());
				    actual_feed=feed_array.getFeed().get(i-1);
			    	log("--> Vorherigen Beitrag aufrufen "+(i-1));
			    	updateUI();
			     }
			   if(arg0.getClickCount()>1){
				
			   }
			
		}

		@Override
		public void mouseEntered(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseExited(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mousePressed(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseReleased(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}
		
	}


	public void initUI(){

			getContentPane().setLayout(null);
			
			panel = new JPanel();
			panel.setBackground(Color.BLACK);
			panel.setBounds(0, 0, 335, 210);
			getContentPane().add(panel);
			panel.setLayout(null);
		    
			ui_category_text = new JTextField();
			ui_category_text.setFont(new Font("Tekton Pro", Font.BOLD, 11));
			ui_category_text.setEditable(false);
			ui_category_text.setHorizontalAlignment(SwingConstants.CENTER);
			ui_category_text.setBackground(Color.BLACK);
			ui_category_text.setForeground(Color.WHITE);
			ui_category_text.setText("#Kategorie");
			ui_category_text.setBounds(0, 39, 170, 20);
			ui_category_text.setBorder(BorderFactory.createLineBorder(new Color(184,90,12),1,false));
			panel.add(ui_category_text);
			ui_category_text.setColumns(10);
			
			ui_feedtime_text = new JTextField();
			ui_feedtime_text.setFont(new Font("Tekton Pro", Font.BOLD, 11));
			ui_feedtime_text.setEditable(false);
			ui_feedtime_text.setBackground(Color.BLACK);
			ui_feedtime_text.setForeground(Color.WHITE);
			ui_feedtime_text.setBorder(BorderFactory.createLineBorder(new Color(184,90,12),1,false));
			ui_feedtime_text.setHorizontalAlignment(SwingConstants.CENTER);
			ui_feedtime_text.setText("#Ver\u00F6ffentlichungszeit");
			ui_feedtime_text.setBounds(169, 39, 165, 20);
			panel.add(ui_feedtime_text);
			ui_feedtime_text.setColumns(10);
			ui_feedtime_text.addMouseListener(new MouseListener(){

				@Override
				public void mouseClicked(MouseEvent arg0) {
					// TODO Auto-generated method stub
					if(arg0.getClickCount()>1){
						if(Properties.FEEDTIME_MODUS.equals("1")){
							Properties.FEEDTIME_MODUS="0";
							updateUI();
						}
						else {Properties.FEEDTIME_MODUS="1";
							  updateUI();
						}
					}
				}

				@Override
				public void mouseEntered(MouseEvent e) {
					// TODO Auto-generated method stub
					
				}

				@Override
				public void mouseExited(MouseEvent e) {
					// TODO Auto-generated method stub
					
				}

				@Override
				public void mousePressed(MouseEvent e) {
					// TODO Auto-generated method stub
					
				}

				@Override
				public void mouseReleased(MouseEvent e) {
					// TODO Auto-generated method stub
					
				}});
			
			ui_newsimage = new JLabel("");
			ui_newsimage.setHorizontalAlignment(SwingConstants.CENTER);
			ui_newsimage.setToolTipText("Klicken Sie auf das Bild, um es in voller Gr\u00F6\u00DFe anzuzeigen...");
			ui_newsimage.setBounds(10, 69, 110, 108);
			//ImageIcon ico = new ImageIcon(this.getClass().getClassLoader().getResource("ajaxloader.gif"));
			//Image actual_image = ico.getImage();
			
			//ico.setImage(actual_image.getScaledInstance(ui_newsimage.getWidth(),ui_newsimage.getHeight(), Image.SCALE_DEFAULT));
			
			ui_newsimage.setIcon(loader_gif);
		   
			//ui_newsimage.setText("News-Image");
			ui_newsimage.addMouseListener(new MouseListener(){ 
				
				@Override
				public void mouseReleased(MouseEvent e) {
					// TODO Auto-generated method stub
					
				}
				
				@Override
				public void mousePressed(MouseEvent e) {
					// TODO Auto-generated method stub
					
				}
				
				@Override
				public void mouseExited(MouseEvent e) {
					frame2.setVisible(false);
					
					
				}
				
				@Override
				public void mouseEntered(MouseEvent e) {
					// TODO Auto-generated method stub
					
				}
				
				@Override
				public void mouseClicked(MouseEvent e) {
				    
					Point applet_location = Start.this.getLocationOnScreen();
				    Dimension applet_size = Start.this.getSize();
					try {
						showNewsImageFrame(e,applet_location,applet_size);
					} catch (MalformedURLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}	
					
				}
			});
			panel.add(ui_newsimage);
			
			ui_newstitle = new JTextPane();
			ui_newstitle.setToolTipText("Doppelklicken Sie hier, um den vollst\u00E4ndigen Artikel in ihrem Standard-Webbrowser anzuzeigen");
			ui_newstitle.setEditable(false);
			ui_newstitle.setFont(new Font("Lucida Sans", Font.BOLD, 13));
			ui_newstitle.setText("#News-Titel");
			ui_newstitle.setForeground(Color.WHITE);
			ui_newstitle.setBackground(Color.BLACK);
			ui_newstitle.setBounds(0, 0, 290, 38);
			ui_newstitle.addMouseListener(new MouseListener(){

				@Override
				public void mouseClicked(MouseEvent arg0) {
					if(arg0.getClickCount()>1){
						showInDefaultWebBrowser(actual_feed.getLink_web());
					}
					
				}

				@Override
				public void mouseEntered(MouseEvent arg0) {
					// TODO Auto-generated method stub
					
				}

				@Override
				public void mouseExited(MouseEvent arg0) {
					// TODO Auto-generated method stub
					
				}

				@Override
				public void mousePressed(MouseEvent arg0) {
					// TODO Auto-generated method stub
					
				}

				@Override
				public void mouseReleased(MouseEvent arg0) {
					// TODO Auto-generated method stub
					
				}});
			panel.add(ui_newstitle);
			
			ui_newstext_scrollPane = new JScrollPane();
			ui_newstext_scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
			ui_newstext_scrollPane.setBounds(130, 65, 195, 130);
			ui_newstext_scrollPane.setViewportBorder(null);
			ui_newstext = new JTextPane();
			ui_newstext.setBounds(0, 0, 80, 300);
			ui_newstext.setEditable(false);
			
			ui_newstext.setPreferredSize(ui_newstext_scrollPane.getPreferredSize());
			//ui_newstext.setForeground(new Color(184,90,12));
			ui_newstext.setText("#News-Zusammenfassung");
			ui_newstext.setForeground(Color.WHITE);
			ui_newstext.setBackground(Color.BLACK);
			ui_newstext.setBorder(null);
			
			final Border emptyBorder = BorderFactory.createEmptyBorder(0, 0, 0, 0);
			
			ui_newstext_scrollPane.setBorder(emptyBorder);
			ui_newstext_scrollPane.setOpaque(true);
			ui_newstext_scrollPane.setViewportView(ui_newstext);
			panel.add(ui_newstext_scrollPane);
			
			ui_button_nextfeed = new JLabel("New label");
			ui_button_nextfeed.setToolTipText("Zur n\u00E4chsten Nachricht springen...");
			ui_button_nextfeed.setBounds(98, 180, 24, 24);
			ui_button_nextfeed.setBackground(Color.BLACK);
			ui_button_nextfeed.addMouseListener(new ControlListener());
			ImageIcon pic = new ImageIcon(this.getClass().getClassLoader().getResource("control/right.png"));
			Image img = pic.getImage();
			//pic.setImage(img.getScaledInstance(lblNewLabel.getWidth(),lblNewLabel.getHeight(), Image.SCALE_DEFAULT));
			ui_button_nextfeed.setIcon(pic);
			panel.add(ui_button_nextfeed);
			
			ui_button_prevfeed = new JLabel("New label");
			ui_button_prevfeed.setToolTipText("Zur vorherigen Nachricht springen...");
			ui_button_prevfeed.setBackground(Color.BLACK);
			ui_button_prevfeed.setBounds(8, 180, 24, 24);
			ui_button_prevfeed.addMouseListener(new ControlListener());
			pic = new ImageIcon(this.getClass().getClassLoader().getResource("control/left.png"));
			img = pic.getImage();
			ui_button_prevfeed.setIcon(pic);
			panel.add(ui_button_prevfeed);
			
			ui_control_display = new JLabel("## von ##");
			ui_control_display.setHorizontalAlignment(SwingConstants.CENTER);
			ui_control_display.setFont(new Font("Tahoma", Font.BOLD, 11));
			ui_control_display.setBackground(Color.BLACK);
			ui_control_display.setForeground(Color.WHITE);
			ui_control_display.setBounds(32, 184, 64, 14);
			panel.add(ui_control_display);
			panel.repaint();
			
			// new ImageIcon(this.getClass().getClassLoader().getResource("64x64/little/32.png"))
}
	public void parseParam(String url){
		 
		   String parameters;
		   if (url.indexOf("?") > -1) {
			   parameters = url.substring(url.indexOf("?") + 1);
			   ArrayList<String> valueliste = new ArrayList<String>();
			   ArrayList<String> paramliste = new ArrayList<String>();
			   StringTokenizer paramGroup = new StringTokenizer(parameters, "&");
		       log("@ParseParam ParamString: "+parameters);
			   
		        while(paramGroup.hasMoreTokens()){
		 
				   StringTokenizer value = new StringTokenizer(paramGroup.nextToken(), "=");
				   paramliste.add(value.nextToken());
				   valueliste.add(value.nextToken());
		        }
		        
				for(int i=0;i<valueliste.size();i++){
					 log("@ParseParam ParamArray "+i+":"+paramliste.get(i).toString());
					 log("@ParseParam ValueArray "+i+":"+valueliste.get(i).toString());
					 if(paramliste.get(i).equalsIgnoreCase("update")){Properties.UPDATE_INTERVAL=Long.parseLong(valueliste.get(i).toString())*1000;}
					 if(paramliste.get(i).equalsIgnoreCase("category")){Properties.CATEGORY=valueliste.get(i).toString();}
					 if(paramliste.get(i).equalsIgnoreCase("autoswitch")){}
					 if(paramliste.get(i).equalsIgnoreCase("log")){if(valueliste.get(i).equals("yes"))Properties.LOGGING_ENABLED=true;
					 											   else Properties.LOGGING_ENABLED=false; }
					 			
					 if(paramliste.get(i).equalsIgnoreCase("yes")){}
				}	
		   }
		 }
      private void showNewsImageFrame(MouseEvent e,Point p,Dimension d) throws MalformedURLException{
    	  
    	  double wx,wy;
		
		int x,y;
    	  wx=d.getWidth();
    	  wy=d.getHeight();
    	  Dimension screen_size = getToolkit().getScreenSize();
    	  x=p.x; y=p.y;
    	  
    	  if(e.getClickCount()==1){
				
    		    frame2.getContentPane().removeAll();
				if(!(frame2.isUndecorated())) frame2.setUndecorated(true);
				frame2.getContentPane().setLayout(null);
				//frame.setBounds(0,0,400,400);
				JLabel label = new JLabel();
				label.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
				//label.setBounds(0,0,200,200);
				label.setText("Hallo");
				//ImageIcon pic_orig = new ImageIcon(new URL(actual_feed.getLink_pic()));
				ImageIcon pic_orig = actual_feed.getImage();
				Image img = pic_orig.getImage();
				
				if(wy+img.getWidth(pic_orig.getImageObserver())+y<=screen_size.height){
					frame2.setBounds(x,(int) (y+wy),img.getWidth(pic_orig.getImageObserver()),img.getHeight(pic_orig.getImageObserver()));
				}
				else {
					frame2.setBounds(x,(int) (y-img.getHeight(pic_orig.getImageObserver())),img.getWidth(pic_orig.getImageObserver()),img.getHeight(pic_orig.getImageObserver()));
				}
				
				label.setBounds(0,0,frame2.getWidth(),frame2.getHeight());
				pic_orig.setImage(img);
				label.setIcon(pic_orig);
				//ImageIcon icon = new ImageIcon(NewsParser.imageimage);
				
				frame2.getContentPane().add(label);
				frame2.setVisible(true);
			}
      }
	  private void showInDefaultWebBrowser(String url) {
		    Desktop desk = Desktop.getDesktop();
		    try {
				desk.browse(new URI(url));
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (URISyntaxException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		  }
	
	  class ImageWorkerTask extends SwingWorker<FeedArray,Void> {
		  
		  private NewsParser np = new NewsParser();
		  private FeedArray fa = new FeedArray();
		  private FeedUrls urls = new FeedUrls();
		  
		  ImageWorkerTask() { 
		
  }

         @Override
         public FeedArray doInBackground() {
         
             System.out.println("NewsParser wird ausgeführt...");
           
             
			urls.setAdhoc();
			try {
				fa = np.parse(urls);
			} catch (Exception e) {
				task_is_free=true;
				e.printStackTrace();
			}
			System.out.println("Newsparser fertig...");
			
             return fa;
         }
         
         @Override
         public void done(){
        	
        	 try {
				Start.this.feed_array=this.get();
				actual_feed = feed_array.getFeed().get(0);
				updateUI();
				task_is_free=true;
			} catch (InterruptedException e) {
				task_is_free=true;
				e.printStackTrace();
			} catch (ExecutionException e) {
				task_is_free=true;
				e.printStackTrace();
			}
        	 
        	 
         }
        

}
	
	  
	  public void init(){
		
		initUI();
		String url = getDocumentBase().toString();
		String parameters="";
		log("Url: "+url);
		ArrayList<String> params=new ArrayList<String>();
			   log("ParamString: "+parameters);
			   this.parseParam(url);
		for (int i = 0; i < params.size(); i++) {
			log("Param "+i+": "+params.get(i));
		}
    

	actual_feedurls = new FeedUrls();
	actual_feedurls.setWissenschaft();
	
	Timer t = new Timer();
	t.scheduleAtFixedRate(new updateFeedsTask(), 1,Properties.UPDATE_INTERVAL);
	
   // parseFeeds(actual_feedurls);
	
	
	
	}
	public void parseFeeds(FeedUrls urls){
		
		ui_newsimage.setIcon(loader_gif);
		NewsParser parser = new NewsParser();
		try{
			feed_array = parser.parse(urls);
			actual_feed = feed_array.getFeed().get(0);
			updateUI();}
			catch (Exception e){
				log("Problem mit der Internetverbindung");
			}
	}
	public void updateUI(){
		
		frame2.setVisible(false);
		ui_category_text.setText(actual_feed.getCategory());
		ui_newstext.setText(actual_feed.getSummary());
		DefaultCaret caret = (DefaultCaret) ui_newstext.getCaret();
		caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
		ui_newstitle.setText(actual_feed.getTitle());
		calculateFeedTime(actual_feed.getUpdated());
		if(Properties.FEEDTIME_MODUS=="1") { ui_feedtime_text.setText(actual_feedtime_string); }
		else { SimpleDateFormat df = new SimpleDateFormat("EEE, dd-MMM-yy  HH:mm:ss");
				ui_feedtime_text.setText(df.format(feed_zeit.getTime()));}
		/*Runnable runnable = new ImageThread();
		Thread thread = new Thread(runnable);
		thread.start();*/
		//setNewsImage(actual_feed.getLink_pic());
		//ImageWorkerTask task = new ImageWorkerTask(actual_feed.getLink_pic(),ui_newsimage.getWidth(),ui_newsimage.getHeight());
		//task.execute();
		
		ImageIcon ico = new ImageIcon();
		//ico = actual_feed.getImage(); ACHTUNG CALL BY REFERENCE auf Actual-Feed!!!!!!!!
		ico.setImage(actual_feed.getImage().getImage());
		Image actual_image = ico.getImage();
		ico.setImage(actual_image.getScaledInstance(ui_newsimage.getWidth(),ui_newsimage.getHeight(), Image.SCALE_DEFAULT));
		ui_newsimage.setIcon(ico);
		ui_control_display.setText((Integer.parseInt(actual_feed.getFeedNumber())+1)
									+" von "
									+ (feed_array.getFeedCount()));
		JScrollBar sb = ui_newstext_scrollPane.getVerticalScrollBar();
		log("Value vorher: "+sb.getMinimum());
		
		sb.setValue(0);
		ui_newstext_scrollPane.setVerticalScrollBar(sb);
		log("Value neu: "+ui_newstext_scrollPane.getVerticalScrollBar().getValue());
		ui_newstext_scrollPane.getViewport().setViewPosition(new Point(0,0));
		
	
	}

	class updateFeedsTask extends TimerTask  {
	    public void run (  )   {
	    System.out.println("FLAG TaskIsFree: "+task_is_free);
	     // parseFeeds(actual_feedurls);
	  	ImageWorkerTask task = new ImageWorkerTask();
	    if(task_is_free){
	    	log ( "@updateFeedTask Reguläres Update der Feeddaten..." ) ;
	    	task_is_free=false;
	    	task.execute();
	    }
	      //timer.cancel (  ) ; //Terminate the thread
	    }
	  }

	private void calculateFeedTime(String timestring) {
		log(timestring.trim());
		String datum=""; String zeit=""; String diff="";
		String[] s = timestring.split("T");
		if(s.length>1){datum=s[0].trim();}
		log(datum);
		s = timestring.split("\\+");
		if(s.length>1){diff=s[1];s=s[0].split("T");}
		if(s.length>1){zeit=s[1];}
		log(zeit);
		String year,month,day,hour,min,sec,diff1="";
		s=datum.split("-");
		year=s[0];month=s[1];day=s[2];
		s=zeit.split(":");
		hour=s[0];min=s[1];sec=s[2];
		s=diff.split(":");
		diff1=s[0]; 
		Integer help = Integer.parseInt(hour); help+=Integer.parseInt(diff1);
		hour = help.toString();
		
		log(year+" "+month+" "+day);
		log(hour+" "+min+" "+sec);
		log(diff);
		feed_zeit = new GregorianCalendar(); 
		akt_zeit = new GregorianCalendar();
		
		
		SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
		SimpleDateFormat tf = new SimpleDateFormat("HH-mm-ss");
		
		feed_zeit.set(Integer.parseInt(year), Integer.parseInt(month)-1, Integer.parseInt(day), Integer.parseInt(hour), 
				Integer.parseInt(min), Integer.parseInt(sec));
		//feed_zeit.set(Calendar.AM,0);
		//akt_zeit.set(Calendar.AM,0 );
		log("Datum: "+df.format(feed_zeit.getTime())+"\n"+
							"Zeit: "+tf.format(feed_zeit.getTime()));
		
		long timediff = akt_zeit.getTimeInMillis() - feed_zeit.getTimeInMillis();
		log("Timediff: "+timediff/60000);
		
		long a = timediff/60000; 
		if(a==0){long secs = timediff/1000; actual_feedtime_string="Vor "+secs+ " Sekunden";}
		else if(a>=60&&a<120){long rest = (a%60); 
			if(rest==1){actual_feedtime_string="Vor "+(a/60)+" Stunde "+rest+" Minute";}
			else actual_feedtime_string="Vor "+(a/60)+" Stunde "+rest+" Minuten";}
		else if((a>=120)&&(a<=1440)){long rest = (a%60); actual_feedtime_string="Vor "+(a/60)+" Stunden "+rest+" Minuten";}
		else if (a>=1440){actual_feedtime_string="Vor "+(a/1440)+" Tag";}
		else if (a>=2880){actual_feedtime_string="Vor "+(a/1440)+" Tagen";}
		else if(a==1)actual_feedtime_string="vor 1 Minute";
		else actual_feedtime_string="vor "+a+" Minuten";
	}

	public static void log(String string) {
		if(Properties.LOGGING_ENABLED)System.out.println(string);
		
	}
	public static void log(Integer intstring) {
		if(Properties.LOGGING_ENABLED)System.out.println(intstring);
		
	}
	
	
}
 
Bist du dir im klaren dass updateUI eine Funktion von JComponent ist?
public void updateUI()

Resets the UI property to a value from the current look and feel. JComponent subclasses must override this method like this:

public void updateUI() {
setUI((SliderUI)UIManager.getUI(this);
}
Der code deiner updateUI funktion sieht nicht danach aus. Weiters solltest du Bildoperationen in einen anderen Thread auslagern. Denn startet ein Listener deine Funktion, läuft der code am EDT und deine GUI wird blockiert. Das skalieren von Bildern kann ganz schön dauern, das hängt auch vom Bild selbst ab (Größe, Qualität, Format).
 
Zuletzt bearbeitet:
Ich würde kein Objekt im Klassenrumpf initialisieren.
Dann würde ich die Dinge (ImageIcons, Komponent, etc), die du nicht sofort sehen musst in Worker-Threads initialisieren, parallel @see javax.swing.SwingWorker
 
Hallo. Danke erstmal für die schnellen Antworten.

@bERt0R: Das es bereits eine updateUI()-Methode gibt, war mir in der Tat nicht bewusst. Habe diese also nun umbenannt. Der Tipp mit dem Methoden starten aus den EventHandlern leuchtet ein, werde die entsprechenden Methodenaufrufe nun durch das Starten von eigenen Threads ersetzen, damit die EventHandler schnell abgearbeitet werden können. :toll:

Allerdings besteht immer noch mein Grundproblem mit dem langen Laden der Bilder, auch ohne dass die updateUI()-Methode oder irgendwelche Event-Handler aufgerufen werden. Sobald ich das Bilderladen rauslasse, geht alles blitzschnell. Die Bilder lade ich folgendermaßen:

In meiner Klasse NewsParser, die bereits in einem Swing-Worker-Thread läuft, speichere ich das Bild der jeweiligen News als ImageIcon

Java:
feed_data.setImageIcon(new ImageIcon(new URL(feed_data.getLink_pic())));

Verstehe einfach nicht, warum es auf meinem Rechner hier ohne Probleme läuft und woanders auf 2 verschiedenen Rechnern um den Faktor 30x-40x langsamer?!? :bahnhof:

Für weitere Hinweise, die zur Ergreifung des Problems führen, wäre ich sehr dankbar 😉

MFG

Danny
 
Hi, da die Bilder alle nur so um die 40kb groß sind, wollte ich jetzt nicht für jedes Bild einzeln einen eigenen Thread starten, das wär wohl etwas overkill. 😉

Aber das Problem hat sich jetzt auch eigentlich erledigt. Hatte bei dem Rechner wo es so langsam lief nochmal alle JRE´s und JDK´s neu installiert...danach gings besser! :applaus:

Danke nochmal für eure Tipps?

MFG

Danny
 

Zurück
Oben