Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Murphistic
    aktív tag

    Nekem erre:

    import java.io.Console;

    public class consoleClass {
    public static void main(String[] args) {

    Console console = System.console();

    if (console == null) {
    System.err.println("sales: unable to obtain console");
    return;
    }

    String username = console.readLine("Enter username: ");
    System.out.println(username);
    }
    }

    Ezt dobja:
    run:
    sales: unable to obtain console
    BUILD SUCCESSFUL (total time: 0 seconds)

    Mi lehet a gond, miért nem kéri be a felhasználónevet?

    Nekem is ugyanazt a hibát dobja mint neked, ha a netbeansből indítom a programot.
    Viszont ha a parancssorból indítom, akkor működik. Erre csak az az ötletem van, hogyha a fejlesztőkörnyzet konzolja is fontos neked, akkor használd a System.in -t bemenetként. Nekem eddig nem volt vele gondom, bár az is igaz, hogy ritkán használtam.

  • Murphistic
    aktív tag

    Először én is úgy próbáltam, de hibát dobott. :(
    na sikerült összehozni végül, igaz más módon.

    datum = Calendar.getInstance();
    datum.set(Calendar.YEAR, 2011);
    datum.set(Calendar.MONTH, 12);
    datum.set(Calendar.DAY_OF_MONTH, 15);
    datum.set(Calendar.HOUR_OF_DAY, 0);
    datum.set(Calendar.MINUTE, 0);
    datum.set(Calendar.SECOND, 0);

    Azt szeretném csiinálni ,hogy 2 dátum közötti eltelt napok számáz, órát, percet akarom lekérdezni. Úgy gondoltam ,hogy lekérdeztem a két dátum esetén a millisec-et, és a kettőt kivontma egymásból. Ekkor megkapok egy számot és ha azt osztom 1000*60*60- al akkor megkapom ,hogy hány óra van a két dátum között, ha ezt tovább osztom 24 -el akkor a napokat. De a baj az ,hogy téves számot kapok, ha így csinálom. Mit rontottam el?

    Egyébként mi a hibaüzenet, mert a kódban, ahogy én oldottam meg a visszaszámlálást simán működött. Ott GregorianCalendar-t használtam és ahogy írtad a milliszekundumuk különbségét. Egyébként szerintem a Calendarnál a december 11, mert januárt a 0 jelenti.

  • Murphistic
    aktív tag

    Sziasztok!
    Újabb problémával fordulnék a fórumhoz. Calendart hogy hozok létre saját, általam megadott dátummal?
    Próbáltam így, de hibát dob:
    Calendar datum;
    datum.set(2012, 1, 10, 0, 0, 0);

    Szervusz!

    GregorianCalendar gc=new GregorianCalendar(2011, 11, 31, 17, 20);//januar -0
    2011.december.31 17:20 ( még egy szám a másodpercet jelölné)

    Én így csináltam volna.

  • Murphistic
    aktív tag

    Szia!
    Igen délután én is szórakoztam vele, és nekem is hol eltűnt a szöveg, hol a terület fele fehér volt ,a másik fele meg a kívánt szín, hol dobott egy csomó hibát, szóval akár hogy próbáltma ,sehogy nem jött össze. :( Köszi amúgy ,hogy foglalkoztál vele.
    És amúgy neked működött a 2. mód? Mert nekem nem akar. :(((
    Nem frissíti a számolást. Csak a kezdeti értéket látom. :(((

    A ma délután írt hozzászólásomban írt kód működött. Viszont a tesztemben volt annyi körítés hozzá, hogy az ablakban volt egy gomb is és a számláló csak arra kattintva indult el, de ez szerintem nem számít.

    A kód egyébként így az alapértelmezett megjelenítést használja. Én pl. a NetBeans-ben állítottam be, hogy milyen színű legyen a JLabel.

    Egyébként nagyon eredeti megelenítést akarsz? Mert akkor tényleg a Graphicsos megoldást kéne megtalálnunk :D . Annyit olvastam, hogy az update eljárás békén hagyja a hátteret és meghívja a ComponentUI osztály update függvényét. Itt elvesztettem a fonalat, hogy miért nem működik ( esetemben a végén eltűnt a kiírt szöveg csak a háttér maradt )

  • Murphistic
    aktív tag

    Szia!
    Sajnos nem. Ha előtte hívom meg ,akkor nem fog jól látszani a számlálás másodpercenként, mivel a super.update(g) is folyamatosan hívódik, így "nagy vibrálás" lesz az egész. Meg egy pár másodperc után Exception in thread "AWT-EventQueue-1" java.lang.StackOverflowError lesz.

    A while ciklus miatt van, de nem tudom miért. A "szál nem tud rajzolni", mert benne van a ciklusban??

    Megint próbálkoztam egy kicsit. Sajnos most olyan hibával találkoztam, hogy ugyan szépen frissíti a képet a kód ( az is, amit elsőnek írtál ), de a végén, amikor kilép a ciklusból eltűnik a kiírt szöveg. Mintha ezt a Java update hívásai okoznák, sajnos a megoldásra még nem jöttem rá.

    Viszont ha csak egy számláló kiírása a cél, akkor szerintem egyszerűbb egy JLabel-t használni erre a célra, amit pl. NetBeansben is vagy saját prancsokkal testre szabsz ( háttérszín, betűméret, betű színe, típusa )

    Csináltam egy osztályt, aminek a konstruktorában beállítod, hogy melyik JLabel számoljon és utána meghívod a start-ot.

    class IdoThread extends Thread{
    JLabel label;
    public IdoThread(JLabel label)
    {
    this.label=label;
    }
    public void run(){
    int ido=0;
    while(ido<5){

    label.setText(""+ido);
    label.update(label.getGraphics());
    try{
    Thread.sleep(1000);
    }catch(InterruptedException ie){
    ie.printStackTrace();
    }
    ido++;

    }
    }
    }

    Valahol a programkódban, ahol szükséged van a számláló elindítására ( pl. egy gombra kattintva ) beszúrod ezt:

    IdoThread it=new IdoThread(jLabel1);
    it.start();

    Ennek még az is az előnye, hogy nem blokkolja az alkalmazásod felületét, tehát a számláló akkor is megy, ha mondjuk gépelsz a programodban, vagy így használható lesz egy másik gomb is, ami mondjuk a számláló leállítására szolgál.

    Úgy néz ki, hogy a tegnap esti megoldásom egy elég nagy katyvasz lett :D és nem valószínű, hogy működni is fog.

    Nem tudom, hogy ennyi megoldja-e a problémádat, mert az tényleg furcsa, hogy nem akar működni a kirajzolás a Graphics-on.

  • Murphistic
    aktív tag

    Szia!
    Sajnos nem. Ha előtte hívom meg ,akkor nem fog jól látszani a számlálás másodpercenként, mivel a super.update(g) is folyamatosan hívódik, így "nagy vibrálás" lesz az egész. Meg egy pár másodperc után Exception in thread "AWT-EventQueue-1" java.lang.StackOverflowError lesz.

    A while ciklus miatt van, de nem tudom miért. A "szál nem tud rajzolni", mert benne van a ciklusban??

    Hmmm.

    Most olyasmi jutott még eszembe, hogy az update() hívása nem-e egy másik szálban fut le, ami az aktuális szál lesz és emiatt a sleep dob egy kivételt és emiatt a vibrálás.

    Esetleg ki lehetne próbálni az updatet egy külön szálonmeghívni, így nem az lenne az aktuális.

    Akkor megpróbálnám így: ( az updatet egy külön szálban hívnám meg )

    //Egy külön osztály az update meghívására
    class UThread extends Thread{
    Graphics g;
    JFrame jf; //nem tudom hogy JFrame-e a super típusa a mintádban
    public UThread( Graphics g, JFrame jf )
    {
    this.g=g;
    this.jf=jf;
    }
    public void run(){
    jf.update(g);
    }
    }

    ido++;
    nap.setText(""+ido);
    g.drawString(nap.getText(),10,90);

    UThread ut=new UThread(g, super);
    ut.start(); //meghívjuk az updatet
    try{
    Thread.sleep(1000);
    }catch(InterruptedException ie){
    is.printStackTrace(); //kiírjuk az esetleges hibainformációt
    }

    Remélem nem írtam el semmit, most sajnos nincs alkalmam a kód ellenőrzésére.

  • Murphistic
    aktív tag

    Viszont lett egy újabb gond :DDD
    Mégpedig az, hogy ha egy ciklusban folyamatosna frissítem az egyik kiírt dolgot (számláló), akkor addig a kirajzolt terület háttere fehérré változik, utána pedig visszavált az általam beállítottra. Ez miért van? Mit hagytam figyelmen kívül? Ja és a kirajzolt betű típus és betű szín az nem változik, csak a háttér.

    Color hatterszin=new Color(0,153,255);
    Color betuszin=Color.black;
    Font font=new Font("ARIAL",Font.BOLD,12);

    setBackground(hatterszin);
    g.setColor(betuszin);
    g.setFont(font);
    .........................................
    ........................................

    while(ido<5){
    ido++;
    nap.setText(""+ido);
    g.drawString(nap.getText(),10,90);
    try {

    Thread.sleep(1000);
    } catch (InterruptedException ex) {

    }

    super.update(g);
    }

    Szervusz!

    Az nem lehet a gond, hogy a super.update(g) -t azután hívod meg, hogy 1 másodpercet őihent a szálad és utána azonnal módosítja a kiírt számot?

    Én így próbálnám meg:
    g.drawString(nap.getText(),10,90);
    super.update(g);
    try {
    Thread.sleep(1000);
    } catch (InterruptedException ex) {}

Új hozzászólás Aktív témák

Hirdetés