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!! :eek: ) 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);
		
	}
	
	
}
 

bERt0r

Top Contributor
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:

GUI-Programmer

Top Contributor
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
 

dkr82

Mitglied
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
 

dkr82

Mitglied
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
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Problem mit LookAndFeel auf unterschiedlichen Rechnern AWT, Swing, JavaFX & SWT 3
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
olfibits JavaFX Problem mit HTMLEditor AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
N Swing Problem mit loop AWT, Swing, JavaFX & SWT 2
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Swing Splitpane Problem AWT, Swing, JavaFX & SWT 1
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
N JavaFX Stranges Problem mit der Autoscroll-Eigenschaft von Textareas AWT, Swing, JavaFX & SWT 0
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
J JavaFX Intersect Problem mit Shapes AWT, Swing, JavaFX & SWT 10
R JavaFX MediaPlayer AVI-Problem AWT, Swing, JavaFX & SWT 1
M Swing Problem mit ListCellRenderer AWT, Swing, JavaFX & SWT 7
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
F GUI Auflösung ändern - Koordianten und Proportions Problem AWT, Swing, JavaFX & SWT 21
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Problem mit Variablen AWT, Swing, JavaFX & SWT 4
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
M Swing AttributiveCellTableModel addRow() Problem AWT, Swing, JavaFX & SWT 1
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
B Swing Problem mit Bildpfad AWT, Swing, JavaFX & SWT 4
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
M Swing pack() Problem mit Taskleiste AWT, Swing, JavaFX & SWT 4
N Swing Choice- Problem! AWT, Swing, JavaFX & SWT 8
Q "AWT-EventQueue-0" Exception Problem AWT, Swing, JavaFX & SWT 4
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
P AWT Problem mit Platzierung (GridBagLayout) AWT, Swing, JavaFX & SWT 2
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
A Mini-Menu-Schriften. Ein Problem bei hohen DPI Zahlen AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
G Swing Setvisible problem AWT, Swing, JavaFX & SWT 1
J JTabbedPane: close Button Problem AWT, Swing, JavaFX & SWT 2
Tom299 JavaFX -> fxmlLoader -> getResourceAsStream Problem AWT, Swing, JavaFX & SWT 1
T Problem: ComboBox und addItem AWT, Swing, JavaFX & SWT 5
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
T LayoutManager LookAndFeel-Problem AWT, Swing, JavaFX & SWT 4
F Problem mit Implementierung von Kollisionsabfrage AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
B JavaFX Problem bei Kamera / Group, gesamte Scene bewegt sich mit AWT, Swing, JavaFX & SWT 0
L Swing Vier Gewinnt Problem AWT, Swing, JavaFX & SWT 2
Z GUI-Problem, finde meinen Fehler nicht! AWT, Swing, JavaFX & SWT 11
B JavaFX KeyEvent und Canvas draw Problem AWT, Swing, JavaFX & SWT 9
R Swing Problem: IOException bei ActionListener AWT, Swing, JavaFX & SWT 1
GianaSisters JFrame mit JInternalFrames, Keylistener-Problem AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben