Toon posts:

[Java] Runtime stopt niet waar ik dat wil

Pagina: 1
Acties:
  • 138 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,
Hoe kan ik mijn applicatie stoppen tijdens het runnen zodat hij bijvoorbeeld wacht tot dat ik een button heb ingedrukt.

Ik roep vanuit mij java applicatie een frame class op die een frame bevat met een jlabel en jbuttons. Mijn library roept hem netjes op met een callback functie. Echter is het probleem dat hij daarna vrolijk verder gaat met zijn handelingen. Waardoor dus de Frame GUI geen nut meer heeft om dat hij daar al voorbij is.

Ik roep hem als volgt op vanuit mijn java main.

Java:
1
2
3
4
5
6
7
8
9
10
  public static void main(String[] args) {

    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
      catch(Exception e) {
      e.printStackTrace();
    }
      Begin();
    }


Daarna roept hij dus Begin(); op
Java:
1
2
3
4
5
6
7
8
  public Pcimain(String[] args) {
    PciStart ();
    PciTerminate ();
               }

  static {
  System.loadLibrary ("library");
  }


Daarna Start();
Java:
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
26
27
28
29
30
31
32
public class Mijnclass {

  public native int Start ();


/*----------------------------MessageBox---------------------------------*/

  boolean packFrame = false;

  //Open class MBoxFrame
  private void mbox() {
    MBoxFrame frame = new MBoxFrame();
    //Validate frames that have preset sizes
    //Pack frames that have useful preferred size info, e.g. from their layout
    if (packFrame) {
      frame.pack();
    }
    else {
      frame.validate();
    }
    //Center the window
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = frame.getSize();
    if (frameSize.height > screenSize.height) {
      frameSize.height = screenSize.height;
    }
    if (frameSize.width > screenSize.width) {
      frameSize.width = screenSize.width;
    }
    frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
    frame.setVisible(true);
  }


In mijn library wordt MBox aangeroepen dat hij mag starten. MBox haalt vervolgens mijn frame op.

Source code is nu een beetje raar en niet logisch, komt omdat ik alles heb weggehaa;t dat niet van toepassing is bij deze topic.

PROBLEEM:
Hij roept meteen Terminate() Nadat Start() afisgehandeld. Ik moet dus in deze Start method er iets in zetten wat zegt dat hij niet verder mag, maar moet wachten op een actie. (button select value).

Suggesties.

GR Azi

[ Voor 3% gewijzigd door Verwijderd op 06-11-2003 14:21 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Pas de layout ffies aan.. dan wil hem wel even doorlezen

[edit]
Je moet er rekening mee houden dat je dus ook de event dispatching thread in je systeem krijgt (naast de thread die je had voor je main).

Verder is je verhaal me niet echt duidelijk.

[edit2]
Als je wilt dat er iets gebeurt nadat je die button hebt ingedrukt, waarom roep je die functionaliteit niet gewoon aan als die functie wordt ingedrukt??

[ Voor 89% gewijzigd door Alarmnummer op 06-11-2003 14:22 ]


Verwijderd

Als ik je verhaal dus even kort samenvat: Je wilt een bepaalde functie uitvoeren zodra de gebruiker op een Button klikt.

De normale manier is om een ActionListener aan de button te hangen en vervolgens in de methode actionPerformed(ActionEvent e) van deze listener je acties te starten.

zie: How to Use Buttons, Check Boxes, and Radio Buttons

Je moet andersom redeneren.
Niet: Mijn programma moet stoppen zolang de gebruiker niet op een knop klikt.
Maar: Een functie begint pas als de gebruiker op een knop klikt. :)

[ Voor 27% gewijzigd door Verwijderd op 06-11-2003 14:58 . Reden: Zinsbouw iets aangepast. ]


Verwijderd

Normaal zou ik het eens zijn met de gedachtegang van rmk, maar als ik neem aan (afgaande op je vorige topics) dat je op je native code zit te wachten. Misschien kun je de huidige thread laten slapen tot aan een bepaalde voorwaarde is voldaan:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public native int start();
public static boolean continue = false;

public void JavaStart()
{
  // snelle oplossing: gebruik in de native start de jClass referentie  om continue 
  // op true te zetten, mooier is om setContinue(true) aan te roepen ofzo.

  start();
 
  while(!continue)
  {
     try
     {
        Thread.currentThread().sleep(50);
     }
     catch(InterruptedException exp)
     {
     }
  }

  // en doorgaan
}


Alleen ik ben me aan het bedenken dat die native function eigenlijk zowiezo de huidige thread moet blokken totdat hij returned, tenzij je inderdaad met verschillende threads aan de gang bent. Zonder verdere code is het erg lastig om hier wat zinnnigs over te zeggen. Uit de code blijkt bevoorbeeld nergens waar je die native start() method aanroept. Verder is het me absoluut niet duidelijk wat het stuk code nou precies moet doen, dus bovenstaande zal wel vrij onzinnig zijn in jou geval.

[ Voor 4% gewijzigd door Verwijderd op 06-11-2003 16:55 . Reden: Kan niet tiepen ]