2016-01-11 4 views
0

У меня есть большая проблема, я пытался решить ее в течение нескольких дней. Я запрограммировал небольшую программу, но она не работает. Ошибка - это Stackoverflow. Я уже снова и снова просматривал этот веб-сайт. Я сломал его до той части, которая не работает, поэтому вот код. Это кадр:Ошибка переполнения стека Программирование GUI

package snippet; 
import java.awt.Font; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class MyFrame extends JFrame { 

    JButton button; 
    JLabel label; 
    TextEdit textEdit = new TextEdit(); 

    public void LetsGo() { 

    setBounds(0, 0, 800, 510); 
    setVisible(true); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setTitle("Game"); 
    setResizable(false); 
    setLocationRelativeTo(null); 

    //Labels 

    label = new JLabel(); 
    label.setText("Change Me"); 
    label.setBounds(30, 25, 200, 50); 
    label.setVisible(true); 
    add(label); 

    button = new JButton(); 
    button.setText("I Will Change A Text"); 
    button.setBounds(30, 130, 200, 400); 
    button.addActionListener(new Listener());; 
    add(button);   
} 
    public class Listener implements ActionListener {      

     @Override 
     public void actionPerformed(ActionEvent e) { 
      textEdit.editTheText(); 
     } 
    } 

И этот объект должен отредактировать текст:

package snippet; 

public class TextEdit { 
    MyFrame frame = new MyFrame(); 
    public void editTheText(){ 
     frame.label.setText("Text was edited"); 
    } 
} 

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

+0

ошибка была Stackoverflow –

+0

Пожалуйста [добавить сообщение об ошибке на ваш вопрос] (http://stackoverflow.com/posts/ 34730291/edit), потому что я вижу исключение NullPointerException, а не StackOverflow. –

ответ

0

вы создаете новый MyFrame в TextEdit, что я не думаю, что вы хотите сделать, потому что frame.label будет null.

Что вам действительно нужно делать, это назначить JFrame внутри Listener.

общественного класса Слушатель реализует ActionListener {

private JFrame frame; 

    public Listener(JFrame frame) { 
     this.frame = frame; 
    }      

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if (this.frame.label != null) { 
      this.frame.label.setText("Text was edited"); 
     } 
    } 
} 

Тогда для другого кода, вы не имеете конструктора или ваш фактический класс называется LetsGo?

Предполагая, что это не называется LetsGo, и на самом деле это MyFrame, вам нужен фактический конструктор.

public MyFrame() { 
    LetsGo(); 
} 

Затем в методе LetsGo, добавить рамку к Listener

button.addActionListener(new Listener(this)); 
Смежные вопросы