Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo zusammen,

ich muss mich nun doch wieder an Euch wenden, weil ich wirklich nicht weiter weiss.

Ich habe ein Programm erstellt welches durch unterschiedliche Buttons ein Onlinemessgerät konfiguriert und verwaltet.

Nun möchte ich dass wenn ein Button gedrückt wurde, dass die anderen nicht verwendet werden können für ca 10 Sekunden (länge jedes Buttons zum konfiguerieren)

Ich habe es nun so versucht.

Beispiel eines Buttons:

this.ButtonStandard.setEnabled(false);

this.ButtonFine.setEnabled(false);

this.ButtonSwitchOutput.setEnabled(false);

this.ButtonMinMax.setEnabled(false);

this.ButtonGetConfigFile.setEnabled(false);

this.ButtonGetFiles.setEnabled(false);

this.ButtonDeleteMeassurement.setEnabled(false);

this.ButtonFirmware.setEnabled(false);

this.ButtonGetFtpFile.setEnabled(false);

this.ButtonSetFtpFile.setEnabled(false);

this.ButtonStandard.paintImmediately(0, 0, 500, 600);

this.ButtonFine.paintImmediately(0, 0, 500, 600);

this.ButtonSwitchOutput.paintImmediately(0, 0, 500, 600);

this.ButtonMinMax.paintImmediately(0, 0, 500, 600);

this.ButtonGetConfigFile.paintImmediately(0, 0, 500, 600);

this.ButtonGetFiles.paintImmediately(0, 0, 500, 600);

this.ButtonDeleteMeassurement.paintImmediately(0, 0, 500, 600);

this.ButtonFirmware.paintImmediately(0, 0, 500, 600);

this.ButtonGetFtpFile.paintImmediately(0, 0, 500, 600);

this.ButtonGetFtpFile.paintImmediately(0, 0, 500, 600);

try

{

Thread.sleep(10000);

}

catch (InterruptedException e)

{

System.out.println("geht nicht");

}

this.ButtonStandard.setEnabled(true);

this.ButtonFine.setEnabled(true);

this.ButtonSwitchOutput.setEnabled(true);

this.ButtonMinMax.setEnabled(true);

this.ButtonGetConfigFile.setEnabled(true);

this.ButtonGetFiles.setEnabled(true);

this.ButtonDeleteMeassurement.setEnabled(true);

this.ButtonFirmware.setEnabled(true);

this.ButtonGetFtpFile.setEnabled(true);

this.ButtonSetFtpFile.setEnabled(true);

}

Dies Funktioniert auch soweit. Die Anwendung steht 10 Sekunden und die Buttons sind ausgegraut und werden danach wieder angezeigt. So soll es auch sein, was mich nun stört ist:

Wenn die Buttons ausgegraut sind und ich trotzdem auf einen oder zwei Buttons drücke (Buttons sind ausgegraut) dann werden diese sofort gestartet wenn die Buttons wieder enabled sind und dass darf einfach nicht sein.

Viele Danke schonmal im Voraus

Verwende bitte Code-Tags!

@Topic: Das ist klar, Du "pausierst" Deine Anwendung, d.h. alle Aktionen werden auch pausiert und nicht "verworfen". Ich würde aber generell die Anwendung nicht anhalten, sondern nur die Aktionen der Buttons unterbinden, d.h. der Ansatz ist in den Listener der Buttons.

Pausierende Anwendungen sind sehr "unschön in der Bedienung"

Und wie meinst du das ?

Ich steht grad komplett aufn Schlauch

Du willst ja, dass die Aktionen während einer gewissen Zeit nicht statt finden, d.h. Du darfst den Code im Listener nicht ausführen. Im Moment "friest" Du nur die Anwendung ein.

D.h. ein Button wird geklickt, dann wird ein Timer gestartet, der eben eine gewisse Zeit läuft, während der Timer läuft darf der Code im Listener nicht ausgeführt werden (anders: ist der Timer aktiv, darf der Listener nichts machen).

new Thread(){

public void run(){

DeineHauptKlasse.this.ButtonStandard.setEnabled(false);

DeineHauptKlasse.this.ButtonFine.setEnabled(false);

DeineHauptKlasse.this.ButtonSwitchOutput.setEnabled(false);

DeineHauptKlasse.this.ButtonMinMax.setEnabled(false);

DeineHauptKlasse.this.ButtonGetConfigFile.setEnabled(false);

DeineHauptKlasse.this.ButtonGetFiles.setEnabled(false);

DeineHauptKlasse.this.ButtonDeleteMeassurement.setEnabled(false);

DeineHauptKlasse.this.ButtonFirmware.setEnabled(false);

DeineHauptKlasse.this.ButtonGetFtpFile.setEnabled(false);

DeineHauptKlasse.this.ButtonSetFtpFile.setEnabled(false);



DeineHauptKlasse.this.ButtonStandard.paintImmediately(0, 0, 500, 600);

DeineHauptKlasse.this.ButtonFine.paintImmediately(0, 0, 500, 600);

DeineHauptKlasse.this.ButtonSwitchOutput.paintImmediately(0, 0, 500, 600);

DeineHauptKlasse.this.ButtonMinMax.paintImmediately(0, 0, 500, 600);

DeineHauptKlasse.this.ButtonGetConfigFile.paintImmediately(0, 0, 500, 600);

DeineHauptKlasse.this.ButtonGetFiles.paintImmediately(0, 0, 500, 600);

DeineHauptKlasse.this.ButtonDeleteMeassurement.paintImmediately(0, 0, 500, 600);

DeineHauptKlasse.this.ButtonFirmware.paintImmediately(0, 0, 500, 600);

DeineHauptKlasse.this.ButtonGetFtpFile.paintImmediately(0, 0, 500, 600);

DeineHauptKlasse.this.ButtonGetFtpFile.paintImmediately(0, 0, 500, 600);


try

{

Thread.sleep(10000);

}

catch (InterruptedException e)

{

System.out.println("geht nicht");

}


DeineHauptKlasse.this.ButtonStandard.setEnabled(true);

DeineHauptKlasse.this.ButtonFine.setEnabled(true);

DeineHauptKlasse.this.ButtonSwitchOutput.setEnabled(true);

DeineHauptKlasse.this.ButtonMinMax.setEnabled(true);

DeineHauptKlasse.this.ButtonGetConfigFile.setEnabled(true);

DeineHauptKlasse.this.ButtonGetFiles.setEnabled(true);

DeineHauptKlasse.this.ButtonDeleteMeassurement.setEnabled(true);

DeineHauptKlasse.this.ButtonFirmware.setEnabled(true);

DeineHauptKlasse.this.ButtonGetFtpFile.setEnabled(true);

DeineHauptKlasse.this.ButtonSetFtpFile.setEnabled(true);


}

}

}.start();

Wenn du Thread.sleep einfach so direkt im ActionListener rufst legst du den gesamten GUI-Thread schlafen. Das musst du einfach nur parallelisieren, dann hauts hin. Ob du das direkt über einen Thread oder über einen Timer machst ist am Ende Jacke wie Hose.

Übrigens: Klassen-Variablen werden klein geschrieben. Neue Wörter in der Variable beginnen mit einem großbuchstaben (z.B. "buttonForClosingTheApplication").

Bearbeitet von speedi

Das musst du einfach nur parallelisieren, dann hauts hin. Ob du das direkt über einen Thread oder über einen Timer machst ist am Ende Jacke wie Hose.

Ich denke das wird nicht so funktionieren, denn wenn der Thread schläft und der Button geklickt wird, dann wird nachdem der Button wieder aktiv ist, die Aktion des Listeners trotzdem ausgeführt. Man unterbindet ja mit einem sleep nicht die Abarbeitung.

Ich würde einen Thread bevor ein paralleler Thread schläft eine synchronisierte und final Boolvariable entsprechend setzen und diese innerhalb des Button-Listeners abfragen. Zusätzlich wäre es dann auch sinnvoll eine Statusnachricht einzubauen, die dem User mitteilt, dass gerade gearbeitet wird.

Buttons einfach an- und ausschalten finde ich nicht besonders benutzerfreundlich, ich würde einfach die Aktion des Listeners mit einem Dialog abfangen

Bearbeitet von flashpixx

Ich denke das wird nicht so funktionieren, denn wenn der Thread schläft und der Button geklickt wird, dann wird nachdem der Button wieder aktiv ist, die Aktion des Listeners trotzdem ausgeführt. Man unterbindet ja mit einem sleep nicht die Abarbeitung.

So wie ich es geschrieben habe würde es funktionieren. Du legst ja nicht die GUI schlafen sondern erstellst einen neuen Thread der zuersteinmal die Buttons abschaltet dann schläft(nur dieser eine Thread schläft! - alle anderen natürlich nicht) und dann die Buttons wieder anschaltet.

Wenn du auf einen deaktivierten Button klickst werden seine ActionListener natürlich nicht gerufen, aber der klick wird natürlich verarbeitet, da die GUI eben nicht schläft.

Ich würde einen Thread bevor ein paralleler Thread schläft eine synchronisierte und final Boolvariable entsprechend setzen und diese innerhalb des Button-Listeners abfragen. Zusätzlich wäre es dann auch sinnvoll eine Statusnachricht einzubauen, die dem User mitteilt, dass gerade gearbeitet wird.

Wenn der Grund wieso teile der GUI disabled sind nicht ersichtlich ist wäre das sicher eine sinnvolle Sache. Allerdings darf man dann die Buttons nicht mit setEnabled(boolean B) bearbeiten, da nütlich ausgeschaltete Buttons ihre ActionListener nicht mehr rufen - d.h. man müsste sich was einfallen lassen, damit der User nicht erst beim clicken merkt, dass sein vorhaben nicht möglich ist (z.B. manuelles setzen der Farbe).

Hi ich habs jetzt anders gemacht. ich hab nen Dialog modal hochgepoppt und nach 10 sekunden dann disposed :)

nicht schön aber es funktioniert ...

danke nochmals für die coolen tipps

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.