🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
5 messages
5 total messages Started by Nitecki Thu, 27 Feb 1997 23:34
powrot z dialogu
#359
Author: Nitecki
Date: Thu, 27 Feb 1997 23:34
22 lines
1849 bytes
Probuje zaimplementowac w javie obiekt zachowujacy sie jak MessageBox np. w C++.
Istnieje przy tym nastepujacy problem jezeli chcemy uzyskac powrot do funkcji wywolujacej
taki MessageBox dopiero po jego zamknieciu to mamy problem. Na uzywanej przeze mnie
platformie OS/2 Warp sterowanie z instrukcji show() wraca zawsze od razu nie czekajac
na zamkiniecie dialogu nawet gdy ten jest modalny. Na uzywanej przeze mnie maszynie
UNIXowej ibm.uci.agh.edu.pl dzieje sie inaczej sterowanie wraca dopiero po zamknieciu
tego dialogu.

Przypuszczam, iz ktorys z systemow zle implementuje maszyne wirtualna Javy (przypuszczam iz OS).

Dodatkowo w OSie nie sa wysylane pewne komunikaty np. LOST_FOCUS do okna TextField,
co uniemozliwia zaprojektowanie innego komponentu (TextField z Validatorem).

Czy na innych systemach nie UNIXowych (WIN95, WinNT, MAC, itp) tez sa takie problemy
przy glebszym wniknieciu w awt.

Kolejnym problemem jest uzywanie przez OSa jednego watku do obslugi eventow awt, uspienie go
powoduje zablokowanie aplikacji, (a na UNIXie nie).

Jezeli tak to cala przenosnosc Javy jest do luftu, bo coz z tego ze na poziomie jezyka
jest ona zachowana, skoro psuje ja biblioteka awt. A kto pisze w obecnych czasach
aplikacje tekstowe???
Re: powrot z dialogu
#360
Author: Piotr Piatkowski
Date: Thu, 27 Feb 1997 21:45
52 lines
3495 bytes
Nitecki <nitecki@novell.ftj.agh.edu.pl> wrote:

: Probuje zaimplementowac w javie obiekt zachowujacy sie jak MessageBox
: np. w C++. Istnieje przy tym nastepujacy problem jezeli chcemy uzyskac
: powrot do funkcji wywolujacej taki MessageBox dopiero po jego
: zamknieciu to mamy problem. Na uzywanej przeze mnie platformie OS/2
: Warp sterowanie z instrukcji show() wraca zawsze od razu nie czekajac
: na zamkiniecie dialogu nawet gdy ten jest modalny. Na uzywanej przeze
: mnie maszynie UNIXowej ibm.uci.agh.edu.pl dzieje sie inaczej sterowanie
: wraca dopiero po zamknieciu tego dialogu.

Ten bug z dialogiem modalnym który wcale nie jest modalny, to chyba 
najsłynniejszy (i najstarszy) bug JDK. Poprawiono go dopiero w jednej
z nowszych wersji, więc wiele JVM (Java Virtual Machine) będących w 
użyciu na różne systemy, ciągle nie potrafi zrobić modalnego
dialogu. Co niesamowicie skutecznie utrudnia pisanie większych 
aplikacji :-)  Nie wiem jak nowe wersje Netscape i IE - wiem że jakiś
czas temu sprawdzałem to w Netscape i dialog modalny nie działał, ale
może w końcu to poprawili...

: Czy na innych systemach nie UNIXowych (WIN95, WinNT, MAC, itp) tez sa takie 
: problemy przy glebszym wniknieciu w awt.

Poczytaj sobie "known bugs" do poszczególnych wersji Javy - powinny 
być gdzieś na serwerze http://www.javasoft.com/

: Kolejnym problemem jest uzywanie przez OSa jednego watku do obslugi eventow 
: awt, uspienie go powoduje zablokowanie aplikacji, (a na UNIXie nie).

To ciekawe że na Unixie nie - myślałem że do obsługi takich funkcji 
jak paint() czy update() służy jeden wątek dla całej aplikacji, 
i że jego zablokowanie powoduje zablokowanie obsługi tych wydarzeń.
Ale jak widać - nie do końca. W każdym razie usypianie tego wątku to 
(jak widać) nie jest najlepszy sposób. Stwórz sobie własny wątek i 
tylko steruj nim za pomocą wątku systemowego, wtedy nie będziesz mieć
takich problemów.

: Jezeli tak to cala przenosnosc Javy jest do luftu, bo coz z tego ze na 
: poziomie jezyka jest ona zachowana, skoro psuje ja biblioteka awt. 
: A kto pisze w obecnych czasach aplikacje tekstowe???

W pełni się z tym zgadzam. Dodając do tego wielokrotnie mniejszą 
szybkość działania (a już szczególnie uruchamiania się) programów w 
Javie w stosunku do C (czy nawet do takiego Perla, który jest w końcu
też częściowo interpretowany), powodują że dla mnie Java to ciągle 
ciekawostka, bez praktycznego zastosowania (coś jak Logo - fajnie się
może w tym pisze, ale nie da się zrobić nic praktycznego). Co nie 
znaczy że może, kiedyś, będzie z tego dobre narzędzie. Ale chyba 
trzeba na to jeszcze trochę poczekać.

-- 
Piotr Piątkowski, Uczelniane Centrum Informatyki, AGH Krakow, POLAND
Re: powrot z dialogu
#361
Author: Adam Lejman
Date: Fri, 28 Feb 1997 08:26
142 lines
5144 bytes
Nitecki wrote:
> 
> Probuje zaimplementowac w javie obiekt zachowujacy sie jak MessageBox np. w C++.
> Istnieje przy tym nastepujacy problem jezeli chcemy uzyskac powrot do funkcji wywolujacej
> taki MessageBox dopiero po jego zamknieciu to mamy problem. Na uzywanej przeze mnie
> platformie OS/2 Warp sterowanie z instrukcji show() wraca zawsze od razu nie czekajac
> na zamkiniecie dialogu nawet gdy ten jest modalny. Na uzywanej przeze mnie maszynie
> UNIXowej ibm.uci.agh.edu.pl dzieje sie inaczej sterowanie wraca dopiero po zamknieciu
> tego dialogu.

Nie ty pierwszy i zapewne nie ostatni natknales sie na problem z modal
dialogami. Podobno, tak w javie zalozono, ze po wywolaniu dialogu
funkcja show(), watek go wywolujacy biegnie dalej, a dialog dostaje
drugi watek. Bo niby po co blokowac watek glowny, ktory w tym czasie
moze robic cos innego. Na tym polega smaczek javy. 
Jak obsluzysz dialog to po prostu musisz wolajacego o tym poinformowac.
Blokowanie watku glownego po wywolaniu dialogu jest podobno niedorobka
maszyny wirtualnej na danym systemie. Wyjatek tu stanowi FileDialog,
ktory blokuje watek wywolujacy na wszystkich platformach.

Jednym ze sposobow (moj ulubiony i skuteczny jak do tej pory) jest
wysylanie eventu o zakonczeniu dialogu do rodzica. Rodzic po otrzymaniu
wiadomosci, ze dialog zostal obsluzony, moze wykorzystac pobrane przez
niego dane. Ale nic tak nie wyjasnia rozwiazania problemu jak przyklad.
Przyznam, ze pomysl zaczerpnalem z jednego postingow z
compl.lang.java.misc autorstwa Davida Linkera
<dtlinker@u.washington.edu>:

Adam Lejman

<--------------------------------------------------------------------->
|       _/_/    _/    Adam Lejman,    Warsaw University of Technology |
|     /    _/  _/     Institute of Microelectronics & Optoelectronics |
|   _/_/_/_/  _/      ul. Koszykowa 75, 00-662 Warszawa, POLAND       |
|  _/    _/  _/       tel: (+48)-22-660.72.07  fax: (+48)-22-25.82.03 |
| _/    _/  _/_/_/_/  http://neutron.elka.pw.edu.pl/~alejman/         |
<--------------------------------------------------------------------->


import java.awt.*;

public class testDialog extends Dialog
{
	Button theButton;
	TextField theText;
	Frame theParent;
        
	public testDialog(Frame parent, String title)
	{
		super(parent, title, true); // Call inherited constructor
        theText = new TextField(20);
        this.setLayout(new FlowLayout());
        this.add(theText);
        theButton = new Button("OK");
        this.add(theButton);
        this.pack();
        theParent = parent; // Save who called us
	}
        
	public String gettheText()
	{
		return theText.getText(); // Return the string value
	}
        
	public boolean wasDialogButton(Event event) // Was it our button?
	{
		if (event.target == theButton)
			return true;
		else
			return false;
	}
        
	public boolean handleEvent (Event event)
	{
		if ((event.id == Event.ACTION_EVENT) && (event.target == theButton))
		{
			this.hide();
			theParent.handleEvent(event); // Force parent to handle event
		}
		return false;
	}    
}


import java.awt.*;

public class aTest extends Frame{

	static Button Quit, Show;
    static testDialog d;
    static TextField theText;
        
    public aTest(String title)
    {
    	super (title);
        Quit = new Button("Quit");
        Show = new Button("Show Dialog");
        theText = new TextField(20);
        setLayout(new FlowLayout());
        add(theText);
        add(Show);
        add(Quit);
        d = new testDialog(this,"Open a file");
        this.pack();
        this.show();
    }
        
    public boolean handleEvent (Event event)
    {
    	if (event.id == Event.ACTION_EVENT)
        {
        	if (event.target == Quit)
            {
        	    hide();
                return true;
        	} else
        	if (event.target == Show)
       		{
    	    	d.pack();
    	        d.show();
    	        return true;
    	    }
    	    else
    	    if (d.wasDialogButton(event)) // We got close event from the
dialog
    	    {
    	    	System.out.println("The value was " + d.gettheText()); //Debug
info
    	        theText.setText(d.gettheText()); //Set the field
    	        return true;
    	    }
     	    return false;
        } else 
        	return false;
	}
        
    public static void main(String args[]) 
    {
    	Frame f = new aTest("Test of Dialogs");
	}

}
Re: powrot z dialogu
#362
Author: Krzysztof Murkowski
Date: Tue, 04 Mar 1997 06:53
35 lines
1950 bytes
Adam Lejman wrote:

> Nie ty pierwszy i zapewne nie ostatni natknales sie na problem z modal
[...]
> Ale nic tak nie wyjasnia rozwiazania problemu jak przyklad.
> Przyznam, ze pomysl zaczerpnalem z jednego postingow z
> compl.lang.java.misc autorstwa Davida Linkera
> <dtlinker@u.washington.edu>:
> 
> Adam Lejman

Kompiluje sie bez problemu ale po uruchomienu jedyne co moge zobaczyc to
poznizszy komunikat :

# java aTest

java.lang.NullPointerException
	at sun.awt.motif.MComponentPeer.<init>(MComponentPeer.java:79)
	at sun.awt.motif.MCanvasPeer.<init>(MCanvasPeer.java:32)
	at sun.awt.motif.MPanelPeer.<init>(MPanelPeer.java:30)
	at sun.awt.motif.MDialogPeer.<init>(MDialogPeer.java:39)
	at sun.awt.motif.MToolkit.createDialog(MToolkit.java:104)
	at java.awt.Dialog.addNotify(Dialog.java:78)
	at java.awt.Window.pack(Window.java:80)
	at testDialog.<init>(testDialog.java:17)
	at aTest.<init>(aTest.java:19)
	at aTest.main(aTest.java:53)

OS : Solaris 2.5.1
java version "1.0"

-- 
Krzysztof Murkowski
mailto:murek@ml.put.poznan.pl
http://www.ml.put.poznan.pl/~murek
Re: powrot z dialogu
#363
Author: Adam Lejman
Date: Thu, 06 Mar 1997 16:34
24 lines
1469 bytes
Krzysztof Murkowski wrote:
> Kompiluje sie bez problemu ale po uruchomienu jedyne co moge zobaczyc to
> poznizszy komunikat :
[...]
> java.lang.NullPointerException
>         at sun.awt.motif.MComponentPeer.<init>(MComponentPeer.java:79)
etc.[..]
> OS : Solaris 2.5.1
> java version "1.0"
>
> Krzysztof Murkowski

Przyznje, ze programu nie uruchamialem pod Solarisem. Pokazane przeze
mnie rozwiazanie dziala skutecznie pod Win95 i MacOS, zarowno pod
wirualnymi 
maszynami sunowskimi, jak i z maszynami Microsofta (jview) i Metrowerksa 
(pod Macem). Przypadek Solarisa wskazuje, ze nawet jesli program dziala
na kilku
systemach, to zawsze sie znajdzie co najmniej jeden, na ktorym sie
wylozy.

Adam Lejman
mailto:al@4u.net
http://neutron.elka.pw.edu.pl/~alejman/
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads