Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从netbeans中的另一个类向列表框添加项_Java_Class_Netbeans_Listbox - Fatal编程技术网

Java 如何从netbeans中的另一个类向列表框添加项

Java 如何从netbeans中的另一个类向列表框添加项,java,class,netbeans,listbox,Java,Class,Netbeans,Listbox,我想添加元素到jframe上的列表框中,来自不同的类,但是无论我尝试什么,它似乎都不起作用。。。我没有得到任何错误或任何反馈,这是什么问题。。。但这是我的布局,列表框使用的是DefaultListModelLM2 我知道如何将元素添加到jframe类中的jList中,但由于某些原因,即使在jframe类中添加元素,我也无法从另一个类中添加元素: public void log(String str) { lm2.addElement(str); } 在我的“另一节课”上

我想添加元素到jframe上的列表框中,来自不同的类,但是无论我尝试什么,它似乎都不起作用。。。我没有得到任何错误或任何反馈,这是什么问题。。。但这是我的布局,列表框使用的是DefaultListModelLM2

我知道如何将元素添加到jframe类中的jList中,但由于某些原因,即使在jframe类中添加元素,我也无法从另一个类中添加元素:

  public void log(String str) {
      lm2.addElement(str);
    }
在我的“另一节课”上

# 更多详细信息添加---->

# 我有3门课,它们都是:

初级

  // jFrame class which builds the jframe (from jframe template)
    public class frmMain extends javax.swing.JFrame {

        /** Creates new form frmMain */
        public frmMain() {
            initComponents();
        }



        public void log(String str) {
          lm2.addElement(str);
        }



         public DefaultListModel lm2 = new DefaultListModel();
    }
RequestInfo.class

// RequestInfo.class, which is trying to add an item to the 
// jlist but it doesn't add anything or error

public class RequestInfo {

  public void ProcessReturnedInfo(String sData, boolean bWithLabel) {


            frmMain fm = new frmMain();
            fm.log("test test");



}
RS232Example.class

     // My main class which sets the jFrame to visible
  public class RS232Example {
      public static void main(String[] args) throws Exception {


        frmMain form = new frmMain();
        form.setVisible(true);

    }

  }

我知道也许我需要在RequestInfo.class上将表单设置为可见,但是我不能这样做,因为它会连续多次打开表单,因为该类方法会从事件中多次调用

你的另一门课是什么?我假设
frmMain()
创建了一个
JFrame
,其中包含
JList
,但除非
JFrame
也可见,否则您将看不到它。我怀疑—我可能错了—您有一个以上的
JFrame
实例,并且字符串被添加到一个不可见的实例中

对不起,我病了一会儿,但我相信安德烈亚斯我对你的问题有正确的答案。您不一定需要静态帧对象,但这是最简单的方法。如果您正在处理多个线程,那么您可能仍然会遇到问题,在这种情况下,您将需要一些方法来控制对请求的处理、对尚未完成处理的数据进行排队等


祝你好运。

如果你的列表框模型设置正确(比如
listBox.setModel(this.lm2);
) 我想以下几点应该行得通:

public static void main(String[] args) throws Exception {
  frmMain form = new frmMain();
  form.setVisible(true);
  form.log("Hallo");
}
如果您想知道为什么RequestInfo中的代码不起作用,请记住,对于
ProcessReturnedInfo的每次调用,您都会创建一个新的frmMain,并使用它自己的列表模型

如果只想更新一个帧,请尝试将该帧用作单帧:

frmMain
的构造函数从public更改为private,并将其添加到类中:

private static frmMain instance = null;

public static frmMain getInstance() {
  if (instance == null) {
    instance = new frmMain();
  }
  return instance;
}
您现在必须在
RequestInfo
RS232Example

这就是你总是在同一个框架上工作的方式


祝你好运。

什么是“列表框”?提问时使用恰当的术语。如果在第二个类中有对ListModel的引用,那么addElement()方法应该可以工作。张贴您的SSCCE()演示问题。您发布的代码对我们没有任何帮助。这个问题通常是由于一个引用引起的,即您调用方法来更改数据的组件不是屏幕上显示的组件。我看到在你的“其他类”中,你调用new frmMain()--是我们在可视化的变量上面看到的doit frmMain变量,你调用setVisible(true)(如果它是JFrame)?否则,我支持Rob Camick在上面推荐的所有内容。出于某种原因,无论我尝试什么,我都可以在RequestInfo.class中再次引用DefaultListModel。。。我怎样才能从这个类中添加元素?我明白你的意思,我应该在RequestInfo.class中将“form”设置为可见,但是我不能这样做,因为该方法通过事件处理程序被调用多次。这是一个RS232项目(串行通信数据),所以数据不断输入,并不断在RequestInfo.class中调用此方法。
private static frmMain instance = null;

public static frmMain getInstance() {
  if (instance == null) {
    instance = new frmMain();
  }
  return instance;
}