tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
14
ZUGRIFFE
5641
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Serethos Serethos ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    127
    Servus hab da ein kleines Porblem mit mein Programmchen.

    Wenn ich ein CommPort auf habe und dann mein Programm schließen möchte geht nur das Frame zu aber in Eclipse läuft es noch. Muss es dann über den Roten Button ausschalten.
    Hier so sieht mein Prog.Code aus

    public Root() {
    super();
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    System.runFinalizersOnExit(true);
    }
    /**
    *Mein Destruktor
    */
    protected void finalize(){
    portaus.stop();
    System.out.println("ENDE");
    }

    Hab gedacht mit einen Destrukter bekomme ich das hin und kann dann mein Thread mit portaus.stop(); beenden aber das geht ja nur wenn der Garbage Collector irgendwann aufgerufen wird und der dann mein Destruktor started.

    Hat jemand vieleicht ein andere Idea wie ich Mein Prog schließen kann und am ende mein Thread stopen kann damit es aus geht

    Danke schon mal.
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    tausch doch einfach:
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    durch
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    Serethos Serethos ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    127
    Servus

    hab deins mal versucht aber irgendwie bekomme ich edliche fehler und irgendeine seltsame ausgabe.



    Fehler:

    WaitCommEvent: Error 6
    WaitCommEvent: ErrENDE

    An unexpected exception has been detected in native code outside the VM.
    Unexpected Signal : EXCEPTION_ACCESS_VIOLATION occurred at PC=0x7800F516 during VM shutdown
    Function=setvbuf+0x24B
    Library=C:\WINNT\system32\MSVCRT.dll

    Current Java thread:
    at com.sun.comm.Win32SerialPort.waitForEvent(Native Method)
    at com.sun.comm.NotificationThread.run(Win32SerialPort.java:829)

    Dynamic libraries:
    0x00400000 - 0x00406000 C:\Programme\Java\j2re1.4.1_01\bin\javaw.exe
    0x77880000 - 0x77903000 C:\WINNT\system32\ntdll.dll
    0x79350000 - 0x793B2000 C:\WINNT\system32\ADVAPI32.dll
    0x77E70000 - 0x77F35000 C:\WINNT\system32\KERNEL32.DLL
    0x77D20000 - 0x77D91000 C:\WINNT\system32\RPCRT4.DLL
    0x77E00000 - 0x77E65000 C:\WINNT\system32\USER32.dll
    0x77F40000 - 0x77F7E000 C:\WINNT\system32\GDI32.DLL
    0x78000000 - 0x78045000 C:\WINNT\system32\MSVCRT.dll
    0x6D330000 - 0x6D45A000 C:\Programme\Java\j2re1.4.1_01\bin\client\jvm.dll
    0x77540000 - 0x77571000 C:\WINNT\system32\WINMM.dll
    0x6D1D0000 - 0x6D1D7000 C:\Programme\Java\j2re1.4.1_01\bin\hpi.dll
    0x6D300000 - 0x6D30D000 C:\Programme\Java\j2re1.4.1_01\bin\verify.dll
    0x6D210000 - 0x6D229000 C:\Programme\Java\j2re1.4.1_01\bin\java.dll
    0x6D320000 - 0x6D32D000 C:\Programme\Java\j2re1.4.1_01\bin\zip.dll
    0x6D000000 - 0x6D0FB000 C:\Programme\Java\j2re1.4.1_01\bin\awt.dll
    0x777F0000 - 0x7780E000 C:\WINNT\system32\WINSPOOL.DRV
    0x782F0000 - 0x78300000 C:\WINNT\system32\MPR.DLL
    0x75DF0000 - 0x75E0A000 C:\WINNT\system32\IMM32.dll
    0x77A40000 - 0x77B2F000 C:\WINNT\system32\ole32.dll
    0x6E330000 - 0x6E336000 C:\WINNT\system32\INDICDLL.dll
    0x6D180000 - 0x6D1D0000 C:\Programme\Java\j2re1.4.1_01\bin\fontmanager.dll
    0x51000000 - 0x51047000 C:\WINNT\system32\ddraw.dll
    0x72810000 - 0x72816000 C:\WINNT\system32\DCIMAN32.dll
    0x72D90000 - 0x72E03000 C:\WINNT\system32\D3DIM.DLL
    0x6D280000 - 0x6D29E000 C:\Programme\Java\j2re1.4.1_01\bin\jpeg.dll
    0x6D2D0000 - 0x6D2DE000 C:\Programme\Java\j2re1.4.1_01\bin\net.dll
    0x74FC0000 - 0x74FC9000 C:\WINNT\system32\WSOCK32.dll
    0x74FA0000 - 0x74FB4000 C:\WINNT\system32\WS2_32.DLL
    0x74F90000 - 0x74F98000 C:\WINNT\system32\WS2HELP.DLL
    0x77830000 - 0x7783C000 C:\WINNT\System32\rnr20.dll
    0x77970000 - 0x77994000 C:\WINNT\system32\DNSAPI.DLL
    0x77310000 - 0x77323000 C:\WINNT\system32\iphlpapi.dll
    0x774F0000 - 0x774F5000 C:\WINNT\system32\ICMP.DLL
    0x772F0000 - 0x77307000 C:\WINNT\system32\MPRAPI.DLL
    0x750C0000 - 0x750CF000 C:\WINNT\system32\SAMLIB.DLL
    0x750E0000 - 0x7512F000 C:\WINNT\system32\NETAPI32.DLL
    0x79430000 - 0x7943F000 C:\WINNT\system32\Secur32.dll
    0x77BE0000 - 0x77BF1000 C:\WINNT\system32\NTDSAPI.dll
    0x77940000 - 0x7796B000 C:\WINNT\system32\WLDAP32.DLL
    0x75130000 - 0x75136000 C:\WINNT\system32\NETRAP.dll
    0x779A0000 - 0x77A3B000 C:\WINNT\system32\OLEAUT32.DLL
    0x77380000 - 0x773B0000 C:\WINNT\system32\ACTIVEDS.DLL
    0x77350000 - 0x77373000 C:\WINNT\system32\ADSLDPC.DLL
    0x77820000 - 0x7782E000 C:\WINNT\system32\RTUTILS.DLL
    0x78310000 - 0x783A1000 C:\WINNT\system32\SETUPAPI.DLL
    0x791A0000 - 0x79202000 C:\WINNT\system32\USERENV.DLL
    0x774B0000 - 0x774E3000 C:\WINNT\system32\RASAPI32.DLL
    0x77490000 - 0x774A1000 C:\WINNT\system32\RASMAN.DLL
    0x77500000 - 0x77522000 C:\WINNT\system32\TAPI32.DLL
    0x71710000 - 0x71794000 C:\WINNT\system32\COMCTL32.DLL
    0x70A70000 - 0x70AD5000 C:\WINNT\system32\SHLWAPI.DLL
    0x77330000 - 0x77349000 C:\WINNT\system32\DHCPCSVC.DLL
    0x777D0000 - 0x777D8000 C:\WINNT\System32\winrnr.dll
    0x777E0000 - 0x777E5000 C:\WINNT\system32\rasadhlp.dll
    0x74F40000 - 0x74F5E000 C:\WINNT\system32\msafd.dll
    0x74F80000 - 0x74F87000 C:\WINNT\System32\wshtcpip.dll
    0x77910000 - 0x77933000 C:\WINNT\system32\imagehlp.dll
    0x72970000 - 0x7299D000 C:\WINNT\system32\DBGHELP.dll
    0x68F30000 - 0x68F3B000 C:\WINNT\system32\PSAPI.DLL

    Local Time = Thu Feb 24 13:13:26 2005
    Elapsed Time = 33
    #
    # The exception above was detected in native code outside the VM
    #
    # Java VM: Java HotSpot(TM) Client VM (1.4.1_01-b01 mixed mode)
    #
     

  4. #4
    Avatar von teppi
    teppi teppi ist offline Mitglied Platin
    Registriert seit
    May 2004
    Ort
    Berlin
    Beiträge
    537
    Kannst du nicht einfach den Comm-Port vor dem Programmabschluss freigeben ? Daran wirds liegen oder ?
     
    :-) möp

  5. #5
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    ... okay jetzt seh ich was du machen willst... man sollte die Beiträge auch bis zum Ende lesen...

    ... shutdownHook to the Rescue
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    /*
     * Created on 24.02.2005
     *
     */
    package de.tutorials;
     
    /**
     * @author TDarimont
     */
    public class ShutdownHookExample {
     
        static Thread shutdownThread = new Thread() {
            public void run() {
                System.out.println("some last Action...");
            }
        };
     
        public static void main(String[] args) {
            Runtime.getRuntime().addShutdownHook(shutdownThread);
     
            for (int i = 0; i < 100; i++) {
                System.out.println(i);
            }
        }
    }

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  6. #6
    Serethos Serethos ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    127
    Servus

    hab das jetzt hier in mein destrukter reingeschrieben
    Runtime.getRuntime().addShutdownHook(Trans.portaus.runner);

    runner = mein Thread

    aber irgendwie passiert nix oder sollte ich diesen befehl wo anders hin schreiben?
     

  7. #7
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    In Java sollte man sich nie auf das Aufrufen eines finalisers verlassen geschweige denn Code dort hinterlegen. Vom Java Laufzeitsystem wird nämlich nicht garantiert, dass die finalize Methode jemals aufgerufen wird.....

    Den shutdownHook setzt du am besten beim Starten deiner Anwendung.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  8. #8
    Serethos Serethos ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    127
    Servus

    hab das in mein Konstruktor geschrieben

    Runtime.getRuntime().addShutdownHook(Trans.portaus.runner);

    aber dadurch bekomme ich ne NULLPOINTER Exception.
     

  9. #9
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Dann hast du Trans.portaus.runner vor dem betretetn dieses Kontextes wohl noch nicht initialisiert...-> ist null. Das solltest du ändern.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  10. #10
    Serethos Serethos ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    127
    Servus

    Hab meinen runner jetzt initialisiert aber jetzt geht mein Programm immer noch ned zu.


    Was macht die funktion eigentlich Runtime.getRuntime().addShutdownHook(Trans.portaus.runner);

    führt der die Funktion stop() für den Thread aus.

    denn ich muss doch immer mein seriellen port schließen wenn ich das Programm schließe
    serialPort.close();
     

  11. #11
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    führt der die Funktion stop() für den Thread aus.
    nein, und das sollte man auch niemals....

    der Thread den du über addShutdownHook übergibst wird dann gestartet kurz bevor die VM beendet und führt seine run() Methode aus.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  12. #12
    Serethos Serethos ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    127
    Servus


    hab jetzt in die RUN methode() ne System.out geschrieben aber irgendwie wird die nur einmal aufgerufen und das am anfang meines Programmes und dann wenn ich das Programm schließe müßte ich doch eigentlich die Ausgabe nochmal sehen weil er ja die run methode von den Thread nochmal ausführt?

    Aber irgendwie passiert nix.

    Kann es sein das mein VM einfach nicht ausgehen will
     

  13. #13
    Serethos Serethos ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    127
    Servus

    nehm alles zurück hab fehler gefunden.

    Hatte doch fehler meldung bekommen durch

    (Exit_on_Close)

    hab das ganze jetzt nochmal gemacht.
    Und jetzt schließt der das Programm aber halt nur wenn ich noch das mit denn
    addShutdownHook(shutdownThread);

    reinnehme.

    Danke nochmal Thomas
     

  14. #14
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    hast du denn auch irgendwo einen aufruf von System.exit(0) stehen oder setzt du beim JFrame auch this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ?

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  15. #15
    Serethos Serethos ist offline Mitglied Gold
    Registriert seit
    Nov 2004
    Beiträge
    127
    Servus

    ne ein aufruf von System.exit(0) hab ich nicht

    nehm

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    aber jetzt hab ich das problem das mein prog nur noch ausgeht wenn ich ein port offen habe vorher nicht? *versteh ich nicht*
     

Ähnliche Themen

  1. Swing Fenster per Button schließen, NICHT das Programm beenden
    Von Markus im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 23.06.09, 12:53
  2. Fenster schließen ohne Applikation zu beenden.
    Von J1M1 im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 11.11.07, 13:21
  3. SWT: Beenden Dialog beim Schließen
    Von ryoshi im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 7
    Letzter Beitrag: 26.06.07, 17:28
  4. Antworten: 0
    Letzter Beitrag: 25.04.05, 20:06
  5. Programm beenden
    Von smith99 im Forum Java
    Antworten: 2
    Letzter Beitrag: 13.12.04, 14:36