Applet Gui ist manchmal grau

A

applet_problem

Gast
Guten tag zusammen,

ich bin gerade dabei für meine firma eine suchfunktion in form eines applets umszusetzten. dieses wird dann in einer mit javascript "generierten" seite eingebunden.

Ich bin prinzipiell mit allem fertig, habe aber einen bug bei dem ich einfach nicht weiterkomme.
Diese tritt nur bei internet explorer auf und äußert sich wie folgt:

wenn ich die seite mit ie9 lade werden zwar sämtliche komponenten angezeigt allerdings lässt sich nicht interagieren, da man nichts anklicken kann. minimiere ich nun den browser und maximiere ihn wieder wird das applet einfach nur als graue fläche dargstellt. klicke ich dann erneut auf den link funktioniert aber das applet nach laden der seite komischerweise ganz normal.

was auch äußerst komisch ist, ist die tatsache, dass ich, wenn ich im java control panel auf console anzeigen eingetsellt habe, das eben geschilderte problem gar nicht habe.

ich habe schon in der firma auf älteren browsern und auch anderen betriebssystemen (d.h. auf xp statt win7) versucht das ganze auszuführen ==> selbes ergebnis.

an den browser einstellungen kann es auch nicht liegen, da ich schon überprüft habe ob java aktiviert wurde oder nicht. in der gesamten firma ist mindestens jre v.6 installiert, d.h. es lässt sich auch ausschließen, dass es an einer veralteten java version liegt.

schlussfolgerung ==> liegt definitiv an meinem code.

da ich aber auch nach tagelangem googeln nichts dazu gefunden habe dachte ich mir ich wende mich an euch.

hier kommt nun noch der code der lebenszyklus-methoden des applets. den rest darf ich leider nicht in ein öffentliches forum stellen.

Java:
@Override
	public void init(){
		System.out.println("init()");
		setNativeLookAndFeel();
		Dimension buttonSize = new Dimension(80,20);//größe für buttons als dimension definieren
		//erstellen des input
		input = new JTextField("article number", 8);
		input.addKeyListener(this);
		input.addFocusListener(this);
		input.setForeground(Color.GRAY);
		//erstellen des searchbuttons
		search_start = new JButton("search");
		search_start.setActionCommand("search");
		search_start.setEnabled(true);
		search_start.addActionListener(this);
		search_start.setPreferredSize(buttonSize);
		//erstellen des reset buttons
		search_reset = new JButton("reset");
		search_reset.setActionCommand("reset");
		search_reset.setEnabled(false);
		search_reset.addActionListener(this);
		search_reset.setPreferredSize(buttonSize);
		//erstellen der suchleiste
		search_progress = new colorBar();
		search_progress.setValue(0);
		search_progress.setStringPainted(true);
		search_progress.setPreferredSize(new Dimension(860, 25));
		//erstellen des output bereichs mit hyperlinklistener
		output = new JEditorPane();
		output.setEditable(false);
		output.setContentType("text/html");
		output.addHyperlinkListener(new HyperlinkListener(){
			public void hyperlinkUpdate(HyperlinkEvent event){
				if(event.getEventType() == HyperlinkEvent.EventType.ACTIVATED){
					System.out.println(event.getURL());
					String pfad = new String(event.getURL().toString());
					if (http == false){
						pfad = pfad.substring(6);
						pfad = pfad.replace('/','\\');
						System.out.println("Without http! path: " + pfad);
						try{
							String path_reader = null;
							File f = new File("C:/Program Files (x86)");
							if (f.exists()){//FALL ADOBE IN C:/Program Files (x86)
								f = new File("C:/Program Files (x86)/Adobe/");
								path_reader = "C:/Program Files (x86)/Adobe/";
								if (f.exists()){
									String [] adobe_files = f.list();
									for (int i=0; i<adobe_files.length; i++){
										if (adobe_files[i].substring(0,6).equals("Reader")){
											path_reader += adobe_files[i]+ "/Reader/acrord32.exe";
											System.out.println(path_reader);
											i = adobe_files.length;
										}
									}
									Runtime.getRuntime().exec(path_reader + " /n /A\"search=" + suchbegriff + "\" \"" + pfad + "\""); //öffnet Adobe reader mit automatisch generierten parametern
								}
							}
							else{//FALL ADOBE IN C:/Programme/
								f = new File("C:/Programme/");
								if (f.exists()){
									f = new File("C:/Programme/Adobe/");
									path_reader = "C:/Programme/Adobe/";
									if (f.exists()){
										String [] adobe_files = f.list();
										for (int i=0; i<adobe_files.length; i++){
											if (adobe_files[i].substring(0,6).equals("Reader")){
												path_reader += adobe_files[i]+ "/Reader/acrord32.exe";
												System.out.println(path_reader);
												i = adobe_files.length;
											}
										}
										Runtime.getRuntime().exec(path_reader + " /n /A\"search=" + suchbegriff + "\" \"" + pfad + "\"");
									}
								}
							}
						}
						catch(Exception e){
							System.err.println("THE SYSTEM DOESN'T ALLOW TO READ ITS PROPERTIES! " +e);
						}
					}
					else{
						pfad = pfad.replace('\\', '/');
						System.out.println("WITH HTTP! path: " + pfad);
						try {
							Runtime.getRuntime().exec("rundll32.exe url.dll,FileProtocolHandler " + pfad + "#search=\"" + suchbegriff + "\"");
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				}
			}
		});	
		//hinzufügen der menu components zum menu
		GridBagConstraints c = new GridBagConstraints();
		c.fill = GridBagConstraints.HORIZONTAL;
		c.ipady = 6;
		c.weightx = 0.05;
		c.weighty = 0.3;
		c.gridx = 0;
		c.gridy = 0;
		menu.add(search_start,c);
		c.fill = GridBagConstraints.HORIZONTAL;
		c.ipady = 6;
		c.weightx = 0.05;
		c.weighty = 0.3;
		c.gridx = 1;
		c.gridy = 0;
		menu.add(search_reset, c);
		c.fill = GridBagConstraints.HORIZONTAL;
		c.ipady = 1;
		c.weightx = 0.9;
		c.weighty = 0.3;
		c.gridx = 2;
		c.gridy = 0;
		c.gridwidth = 4;
		menu.add(input, c);
		//hinzufügen der progress bar
		progressbar.add(search_progress);
		//erstellen der scrollfunktion
		scroll = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scroll.setViewportView(output);
		scroll.createVerticalScrollBar();
		scroll.setPreferredSize(new Dimension(getWidth(), 525));
		//hinzufügen aller componenten auf einzelne panes und dann zum applet / auf pane von applet
		top.add(menu);
		top.add(progressbar);
		frame.add(top, BorderLayout.NORTH);
		frame.add(scroll, BorderLayout.SOUTH);
		this.getContentPane().add(frame);
	}
	
	@Override
	public void start(){
		System.out.println("start()");

		repaint();
	}
	
	@Override
	public void stop(){
		System.out.println("stop()");
	}
	
	@Override
	public void destroy(){//wird beim verlassen als eine art kill methode ausgeführt
		System.out.println("destroy()");
		Runtime.getRuntime().gc();
		Runtime.getRuntime().exit(0);
		
		
	}

ich hoffe auf eure hilfe! ich selbst komme einfach nicht mehr weiter!

vielen dank schonmal und viele grüße

steffen

p.s. seid bitte nachsichtig mit mir falls der code teilweise etwas "ungewöhnlich" aussieht ^^ is mein erstes java applet ever :p
 

Marco13

Top Contributor
Auf der ersten Seite von How to Make Applets (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components) ist beschrieben, dass man seine Components im EDT erstellen sollte. Geht es vielleicht mit

Java:
public void init(){
    //Execute a job on the event-dispatching thread:
    //creating this applet's GUI.
    try {
        javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                initOnEDT();
            }
        });
    } catch (Exception e) {
        System.err.println("createGUI didn't successfully complete");
    }
}

private void initOnEDT()
{
    // Hier den ganzen Schmodder der vorher in deiner init stand
}

Selbst wenn nicht: So sollte es sein.
 
A

applet_problem

Gast
Hallo Marco13,

vielen dank für die schnelle antowort und den guten tipp.

ich habe das ganze jetzt soweit umgesetzt, das ändert aber nicht an dem fehler.


was ich vorher noch vergessen habe: ie scheint das applet gleich zweimal gleichzeitig zu öffnen. wie oben im code ersichtlich lass ich mir zu begin jeder lebenszyklus-methode per println ausgeben was er gerade macht.

in der console steht wenn ich das applet mit ie starte dann aber komischer drin
Code:
init()
init()
start()
start()

was für mich so aussieht als ob das applet zweimal gleichzeitig aufgerufen wird.

was auch auffällig ist bei ie: wenn ich einen anderen menüpunkt anwähle, d.h. eine andere seite mit javascript "generiere" auf der das applet aber nicht eingebunden ist, scheint sich das applet erst (wie es soll) zu beenden doch dann kommt die konsole wieder hoch, d.h. auch wenn ich nicht dort bin wo das applet eig aufgerufen wird startet der ie es wieder im hintergrund.

ich weiß echt nich warum es ie überhaupt gibt... ie gehört vom markt genommen, da man mit ie immer probleme hat... -.-

ich hoffe ihr könnt mit den infos was anfangen.

viele grüße

steffen
 

Marco13

Top Contributor
Mit JavaScript (und insbesondere möglichen Spezifika und Pitfalls auf dem IE) kenn' ich mich nicht so aus, aber ... die Anführungszeichen bei ""generiert"" klingen ...nach einem Hac^C^C^C als würden da interessante Sachen gemacht ;) Kann es sein, dass lediglich das Script zweimal ausgeführt wird, oder der HTML-Teil, der das Applet enthält zweimal ""generiert"" wird?
 
A

applet_problem

Gast
hallo marco13,

auch wenn ( zugegebenermaßen ;D ) die methode nicht die schönste ist, mit der die seite generiert wird (sie bezieht ihre daten aus csv-dateien), liegt es logisch überlegt wohl eher nicht an ihr, da der selbe code in einem älteren ie sowie in firefox problemlos ausgeführt wird.

außer aber der ie stolpert beim ausführen natürlich (wie immer :D ) als einziger browser und führt deshalb das applet zweimal aus.

was vllt noch erwähnenswert ist:

wenn ich den menüpunkt verlasse in dem das applet aufgerufen wird, lösche ich im endeffekt nur den inhalt des content <div> blocks per jquery.

außerdem: wenn ich den browser minimiere sollte ja eigentlich die stop() methode aufgerufen werden, tut sie aber nicht, ebenso wenig wie die start() methode bei erneutem minimieren aufgerufen wird.

ich verstehe das ganz irgendwie nicht weil das komischste an der gesamten sache ist, dass eben alles funktioniert, sobald ich im java control panel einstelle, dass die konsole angezeigt und nicht versteckt werden soll.

viele grüße

steffen
 

Marco13

Top Contributor
Dann wüßte ich spontan (und wegen mangelnder Erfahrung mit IE und JavaScript, und weil ich nicht sooo viele Applets schreibe) auch nicht weiter.

Aber ganz pragmatisch: Hast du mal probiert, das Applet durch das erstbeste Standard-Tutorial-Applet von der Sun-Website zu ersetzen, und zu schauen, ob es da auch Probleme gibt? (Alein um einzugrenzen, ob es wirklich am Applet-Code liegt...)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Warum nutzt man manchmal setpaint und manchmal setcolor? AWT, Swing, JavaFX & SWT 2
J Komponente wird manchmal falsch gezeichnet AWT, Swing, JavaFX & SWT 0
L JDialog hat manchmal keinen Inhalt AWT, Swing, JavaFX & SWT 2
T Scene-Wechsel manchmal weiss AWT, Swing, JavaFX & SWT 3
B Manchmal grauer Bildschirm; Manchmal nicht AWT, Swing, JavaFX & SWT 5
S Swing Problem mit Swing - Fenster friert manchmal ein. AWT, Swing, JavaFX & SWT 7
P Swing JTextArea - beim neuzeichnen bleibt manchmal weißer Kasten AWT, Swing, JavaFX & SWT 10
P Swing KeyListener hört nur manchmal zu AWT, Swing, JavaFX & SWT 2
T Swing repaint funktioniert nur manchmal? AWT, Swing, JavaFX & SWT 6
S Seltsames Problem - manchmal enthaelt die ActionMap eine JTextArea keine Actions. AWT, Swing, JavaFX & SWT 4
R Manchmal werden die Inhalte des JFrames nicht angezeigt AWT, Swing, JavaFX & SWT 3
K GUI verfärbt sich manchmal AWT, Swing, JavaFX & SWT 32
H JList.setEnabled(false) - Text soll nicht grau sein AWT, Swing, JavaFX & SWT 2
T Swing Button bleibt grau [=> UI hat sich aufgehängt, Aufgabe in Thread auslagern] AWT, Swing, JavaFX & SWT 3
S Java 3d Fenster bleibt grau AWT, Swing, JavaFX & SWT 4
S Swing JFrame neuzeichnen - bleibt grau AWT, Swing, JavaFX & SWT 18
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
C RadioButton nicht änderbar stellen, ohne das Sie grau wird AWT, Swing, JavaFX & SWT 9
0 JTable - Hintergrund Tabellen statt Grau AWT, Swing, JavaFX & SWT 5
S Buttons werden nach action grau AWT, Swing, JavaFX & SWT 4
J jTableHeade nicht grau unterlegt AWT, Swing, JavaFX & SWT 5
F JFrame bleibt grau AWT, Swing, JavaFX & SWT 24

Ähnliche Java Themen

Neue Themen


Oben