Avatar billede jespersahner Nybegynder
31. januar 2005 - 09:59 Der er 7 kommentarer og
1 løsning

"Open-end" Java-session

Jeg ønsker at lave en slags Java-applikation, hvor man f.eks. i et tekst-vindue har mulighed for at få kørt et Java-program. For så vidt tekst-vinduet indeholder et fuldt Java-program er det blot at afvikle dette, men ideen er, at programmet skal kunne afvikles "step-wise", dvs. man skal kunne afvikle f.eks. en linie ad gangen osv.

Jeg har brug for lidt inspiration til, hvordan man overordnet kunne designe en sådan applikation, og jeg tænker her ikke på det grafiske layout men det konstruktionsmæssige i at lave en slags "open-end" Java-session.
Avatar billede snoop_one Nybegynder
31. januar 2005 - 10:52 #1
Jeg vil nok anbefale at benytte en debugger (JDB). Den kan noget af det du efterlyser...

Du kan se en lille tutorial i understående link:
http://www.javaworld.com/javaworld/javaqa/2000-06/04-qa-0623-jdb.html

eller from the source:
http://java.sun.com/j2se/1.5.0/docs/guide/jpda/examples.html
Avatar billede jespersahner Nybegynder
31. januar 2005 - 13:29 #2
->snoop_one: Det er nok en udmærket ide at tænke i f.eks. JDI. Mit behov er for så vidt blot at kunne starte/stoppe en session, så det bør være muligt.

Videre kunne jeg tænke mig at lave en form for "step-vis kompilering" og ikke bare "step-vis eksekvering", således at kompilering foretages i takt med at programmet afvikles - altså en slags inter-aktiv "open-end" Java-session, hvor brugeren løbende taster kode ind, som derefter kompileres og eksekveres.

Har du nogen kommentar til, om dette vil kunne lade sig gøre?
Avatar billede snoop_one Nybegynder
31. januar 2005 - 18:19 #3
Om det, med step-vis kompilering vil kunne lade sig gøre ved jeg faktisk ikke - men tror det næsten ikke. Det der kommer nærmest det du efterspørger har jeg set i eclipses scrapbook, hvor man kan skrive kodestumper og få eclipse til at eksekvere det.

Jeg har også svært ved at forstå hvorfor step-vis kompilering og eksekvering giver nogen mening - når vi taler om JAVA?

f.eks hvis du har:

public class MyTest{
  ...
  MyObject obj = new MyObject();
  ...
  private class MyObject{
    ...
  }
}

Ovenstående er jo et fuldstændigt lovligt Java language konstruktion.

I dit tilfælde (med stepvis kompilering) vil dit program kompilere linien
... obj = new  MyObject();
men den vil nok komme med en kompilerings fejl, da den ikke ved om MyObject klassen findes. Så det er først når hele klassen er blevet stepvise kompileret at du så kan give brugeren en fejlmeddelelse om, at der er kompileringsfejl eller at klassen er fri for kompileringsfejl.
Avatar billede jespersahner Nybegynder
31. januar 2005 - 23:00 #4
->snoop_one: Det er helt korrekt. Det step-vise kommer i stand derved, at applikationen jo kun ved, hvad brugeren har tastet ind, indtil et vist tidspunkt, når kompilering skal ske. I ovennævnte eksempel vil det være sådan, at brugeren skal taste så meget kode ind, at koden lovligt kan kompilere indtil det tidspunkt, brugeren beder om det.

Fordelen ved denne fremgangsmåde, som jeg forestiller mig det, er, at den dynamik, som man at bygger ind med reflections - og som er temmelig tung - ikke altid er nødvendig, idet de dynamiske valg i mange tilfælde lægges fast, efterhånden som programmet afvikles.

I første omgang er jeg interesseret i at kunne starte en Java-session op fra en anden Java-session. Har du nogen kommentar til, hvordan dette gøres?
Avatar billede snoop_one Nybegynder
01. februar 2005 - 15:49 #5
Ja, Runtime klassen kan gøre det, f.eks.

/*************** Frame.java **********************************************/
import java.io.IOException;
import javax.swing.JFrame;

public class Frame extends JFrame {

    public Frame() {
        super();
        setTitle("Frame");
        setDefaultCloseOperation(Frame.EXIT_ON_CLOSE);
        try {
            String java = "java -cp .";
            String classfile = "MyFrame";
            String args = "";
            String cmd = java + " " + classfile + " " + args;
            Process p = Runtime.getRuntime().exec(cmd);
            setVisible(true);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new Frame();
    }

}
/*************** MyFrame.java **********************************************/
import javax.swing.JFrame;

public class MyFrame extends JFrame{
   
    public MyFrame() {
        super();
        setDefaultCloseOperation(Frame.EXIT_ON_CLOSE);
        setTitle("MyFrame");
        setVisible(true);
    }
    public static void main(String[] args){
        new MyFrame();
    }
}
Avatar billede snoop_one Nybegynder
02. februar 2005 - 19:14 #6
Kunne det bruges?
Avatar billede jespersahner Nybegynder
03. februar 2005 - 09:56 #7
->snoop_one: Ja, det er fint. Smid lige et svar.
Avatar billede snoop_one Nybegynder
03. februar 2005 - 10:10 #8
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Capgemini Danmark A/S

Java Engineer

SOS International

IT Procurement Manager

Forsvarsministeriets Regnskabsstyrelse

Datadesigner