JTextField -> Int

Fórumok

itt ulok felette egy oraja es egyszeruen nem ertem

van ket JTextFieldem, meg egy button ami feldolgozza oket. mindket field atadodik parameterkent a listener functionnek,nekem pedig ugye szuksegem volna a tartalmukra. az egyikkel mukodik ugyanis string kell, a masikbol intet kene varazsolnom de azt mondja, hogy empty. pedig nem az, mert:


class PsStarter implements ActionListener {

private JTextField in;
private JTextField atimer;
private int wtime;
private JLabel out;

// constructor of ps starter
public PsStarter(JTextField in,JTextField atimer,JLabel out) {
this.in = in;
this.atimer = atimer;
this.out=out;
try
{
this.wtime = Integer.parseInt(this.atimer.getText().trim());
}
catch(NumberFormatException e)
{
System.out.println(e.getMessage());
this.wtime=0;
}
}

itt kezdunk, es mindig bemegy a NFE agba, igy 0-va valik, pedig kesobb miutan a listener tovabbi reszei is implementalva vannak, biztos ami biztos a gomb lenyomasakor

System.out.println(atimer.getText());
System.out.println(this.wtime);

tehat a general outputban ott figyel nekem, hogy 6446 aztan pedig egy 0, de fel nem tudom fogni, hogy miert. atnyalaztam egy halom weblapot es allitolag ennek igy rogton mennie kene az Integer.parseInt(string) modszerrel.

mit teveszthetek szem elol? koszi elore is.

Hozzászólások

Na várj, ha a konstruktorban van a parseInt, de a gomb lenyomásakor iratod ki az értékeket, akkor az nem fog feltétlenül megegyezni. Miért nem az actionPerformedban van a parse?

azota megoldottam igazabol es oda kerult maga a kiolvasas, csak ugy tunik iszonyat faradt voltam...
nyilvan a konstruktorban csak hivatkozom azokra a fieldekre, de a kiolvasas mar a gomb actionnel kell, hogy legyen.

elnezest a folosleges postert, igy utolag mar nekem is egyertelmu.

[insert line here]
B.C. 3500 - DIY Vehicle / A.D. 30 - DIY Religion / A.D. 1991 - DIY OS

Pasztalj teljes kodokat, ez igy egyreszt hulyeseg, a konstruktorban semmi keresnivaloja, masreszt amit mondasz, az sehogy nem jon ki. Osszedobtam neked egy (sikeres) JUnit tesztet, hogy ertsd, hogyan mukodik a parseInt:


import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import org.junit.Test;

/**
 *
 * @author hron
 */
public class IntegerTest {
    
    private int expected = 42;
    private String subject = " 42";
    
    
    @Test
    public void testStringParseInt() {
        try {
            assertEquals(expected, Integer.parseInt(subject));
            // A szokoz miatt itt NFE -nek kell jonnie...
            fail("NumberFormatException expected");
        } catch(NumberFormatException ex) {
            // Pass
        }
    }
    
    @Test
    public void testStringParseIntAfterTrim() {
        try {
            // Itt pedig nem szabad NFE-nek jonnie, es 42-t kell kapnunk
            assertEquals(expected, Integer.parseInt(subject.trim()));
        } catch(NumberFormatException ex) {
            fail("NumberFormatException happened: " + ex.getLocalizedMessage());
        }
    }
}

Tehat amit csinalsz, annak jonak kene lennie, a fenti teszt alapjan. Biztos, hogy az Integer.parseInt nem hibazik. Az ertekek rosszak, amiket hasznalsz. Tehat kellene a valodi kod, nem ez a pszeudo kod.

--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

tenyleg semmi keresnivaloja, es ahol ellenoriztem kesobb az ertekeket az mar a button eventje volt, tehat egyreszt a rosszkor kiolvasott adatot kertem le (this.wtime) majd a helyeset a hivatkozott fieldbol. (atimer.getText())

nem veletlen, hogy az elso ertek mindig ures volt, hiszen a listener letrehozasakor az a field ures...

[insert line here]
B.C. 3500 - DIY Vehicle / A.D. 30 - DIY Religion / A.D. 1991 - DIY OS