Thread View: pl.comp.lang.java
5 messages
5 total messages
Started by Nitecki
Thu, 27 Feb 1997 23:34
powrot z dialogu
Author: Nitecki
Date: Thu, 27 Feb 1997 23:34
Date: Thu, 27 Feb 1997 23:34
22 lines
1849 bytes
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
Author: Piotr Piatkowski
Date: Thu, 27 Feb 1997 21:45
Date: Thu, 27 Feb 1997 21:45
52 lines
3495 bytes
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
Author: Adam Lejman
Date: Fri, 28 Feb 1997 08:26
Date: Fri, 28 Feb 1997 08:26
142 lines
5144 bytes
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
Author: Krzysztof Murkowski
Date: Tue, 04 Mar 1997 06:53
Date: Tue, 04 Mar 1997 06:53
35 lines
1950 bytes
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
Author: Adam Lejman
Date: Thu, 06 Mar 1997 16:34
Date: Thu, 06 Mar 1997 16:34
24 lines
1469 bytes
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