Java, что является базовым документом - PullRequest
0 голосов
/ 16 апреля 2011

Я пытаюсь создать простой графический интерфейс Java (я учился только неделю).Я сделал текстовое поле, в котором пользователь должен ввести номер.Я хочу сделать что-то с числом, но проблема сейчас заключается в том, что я получаю нулевой указатель, за исключением случаев, когда я вызываю метод textfield.getText ().В документации говорится, что вы можете получить исключение, когда ваш базовый документ имеет значение null.Я не знаю, что такое "недопустимый документ" .

Любая помощь?Код:

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.BadLocationException;

import java.awt.*;
import java.awt.event.*;

public class GUI extends JFrame {
    String [] aFull1 = new String [500];
    String [] aFull2 = new String [500];
    String [] aFull3 = new String [500];
    String [] aFull4 = new String [500];
    String [] aList1 = new String [15];
    String [] aList2 = new String [15];
    String [] aList3 = new String [15];
    String [] aList4 = new String [15];
    int pop1 = 0;
    int pop2 = 0;
    int pop3 = 0;
    int pop4 = 0;

//JTextField tfNr = new JTextField ();
JTextField tfNr = new JTextField ("");
JButton bStart = new JButton ("Start");
JButton bPause = new JButton ("Pause");
JButton bStop = new JButton ("Stop");
JList lList1 = new JList (aList1);
JList lList2 = new JList (aList2);
JList lList3 = new JList (aList3);
JList lList4 = new JList (aList4);
JButton bOK = new JButton ("OK");
JButton bRemove = new JButton ("Remove last item");
JTextArea taTijd = new JTextArea ("00:00:00", 10, 4);
JPanel panel = new JPanel();
Timer timer = new Timer(1000, new ActionListener () {
    public void actionPerformed (ActionEvent e){
        time++;
        dispTime (); }}
);

final JTextArea taStrtNr = new JTextArea ("Voer startnummer in:");

static int time = 0;
static int pTime;

GUI () {
    // Set title //
    super ("Ultraloop");
    addToWindow ();
    setPos ();  
    setProperties ();

    // Add ActionListeners //
    handler HO = new handler ();
    bStart.addActionListener(HO);
    bPause.addActionListener(HO);
    bStop.addActionListener(HO);
    bOK.addActionListener(HO);

    /*for (int i = 0; i<100; i++){
        addOne(1,"One");
    }
    addOne(1,"Two");
    scrollDown(1);

    addOne(1,"One");
    addOne(2,"Two");
    addOne(3,"Three");
    addOne(4,"Four");*/

    // Final add //
    add(panel);
}

private class handler implements ActionListener {
    public void actionPerformed (ActionEvent e){
        if (e.getSource()==bStart){
            if (!timer.isRunning()){
                timer.start();
            }
        }
        else if (e.getSource () == bPause){
            if (timer.isRunning()){
                pTime = time;
                timer.stop();
            }
            else if (pTime != 0){
                timer.start();
                time = pTime;
            }
        }
        else if (e.getSource() == bStop){
            if (timer.isRunning()){
                timer.stop();
                time = 0;
                dispTime();
            }
        }
        else if (e.getSource() == bOK){
            try {
                if (tfNr.getDocument().getText(0,2) != null){
                    addOne(Integer.getInteger(tfNr.getDocument().getText(0,2)));
                }
            } catch (BadLocationException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    }
}

private void addToWindow (){
    add(tfNr);
    add(bStart);
    add(bPause);
    add(bStop);
    add(lList1);
    add(lList2);
    add(lList3);
    add(lList4);
    add(bOK);
    add(bRemove);
    add(taTijd);
    add(taStrtNr);
}
private void setPos () {
    tfNr.setBounds(20,25, 75,25);
    bStart.setBounds(500,255, 75,25);
    bPause.setBounds(500,290, 75,25);
    bStop.setBounds(500,325, 75,25);
    lList1.setBounds(20,75, 60,272);
    lList2.setBounds(80,75, 50,272);
    lList3.setBounds(130,75, 150,272);
    lList4.setBounds(280,75, 150,272);
    bOK.setBounds(110, 25, 75, 25);
    bRemove.setBounds(80,20, 150,20);
    taTijd.setBounds(445,10, 150,50);
    taStrtNr.setBounds(20, 5, 150, 25);
}
private void setProperties () {
    // Set Editable //
    taTijd.setEditable(false);
    taStrtNr.setEditable(false);

    // Set Font //
    taTijd.setFont(new Font("Arial", Font.BOLD + Font.ITALIC, 28));
    bRemove.setFont (new Font("Arial", Font.PLAIN, 12));

    // Set List properties //
    lList1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    lList2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    lList3.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    lList4.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    lList1.setVisibleRowCount(15);
    lList2.setVisibleRowCount(15);
    lList3.setVisibleRowCount(15);
    lList4.setVisibleRowCount(15);
    lList1.setBorder(BorderFactory.createLineBorder(Color.black));
    lList2.setBorder(BorderFactory.createLineBorder(Color.black));
    lList3.setBorder(BorderFactory.createLineBorder(Color.black));
    lList4.setBorder(BorderFactory.createLineBorder(Color.black));
    lList1.setBackground(new Color(180,180,180));
    lList2.setBackground(new Color(180,180,180));
    lList3.setBackground(new Color(180,180,180));
    lList4.setBackground(new Color(180,180,180));

    panel.setBackground(Color.WHITE);
    tfNr.setBackground(new Color(230,230,230));
    tfNr.setBorder(BorderFactory.createLineBorder(Color.BLACK));
}

private void addOne (int nr) {
    System.out.print(String.format("%d",nr));
}
private void removeOne (){

}

private void dispTime () {
    int h, m, s;
    h = time/3600;
    m = (time%3600)/60;
    s = ((time%3600)%60);
    taTijd.setText(String.format("%02d:%02d:%02d",h,m,s));
}

private void scrollDown (int a) {

}

}

Ответы [ 3 ]

4 голосов
/ 16 апреля 2011

tfNr.getText () использует Document (PlainDocument для JTextField).То же самое, что звонить tfNr.getDocument().getText(0, tfNr.getDocument().getLenght())

4 голосов
/ 16 апреля 2011

Если вы получаете нулевой указатель на эту строку:

if (tfNr.getText() != null){

Тогда может показаться, что tfNr равно нулю.Убедитесь, что вы присваиваете этой переменной значение перед этой строкой.

0 голосов
/ 17 апреля 2011

В этой строке выдается исключение:

addOne(Integer.getInteger(tfNr.getDocument().getText(0,2)));

и это потому, что следующая часть этой строки имеет значение null:

Integer.getInteger(tfNr.getDocument().getText(0,2))

. Следующий метод не принимает значение null в качестве аргумента:

private void addOne (int nr) {

, поскольку примитивные типы не совместимы с нулевыми указателями. Следовательно, генерируется исключение NullPointerException.

Чтобы избавиться от исключения (но не проблемы), вы можете изменить int в Integer в строке выше.

Что касается проблемы, вы должны взглянуть на то, что метод getInteger () на самом деле (проверить Javadoc). Я предполагаю, что вы действительно хотите сделать:

addOne(Integer.parseInt(tfNr.getText(0,2)));

или, может быть:

addOne(Integer.parseInt(tfNr.getText()));

чтобы получить весь текст.

Также обратите внимание, что вам не нужен getDocument ().

P.S. Возможно, вы захотите перефразировать свой вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...