2016-03-02 87 views
0

我正在创建客户端 - 服务器聊天应用程序,我打算需要存储用户名以获得更好的用户体验。一旦我触发主方法,就会调用load()方法。此方法通过从配置文件中读取来自动设置用户名。配置文件不为空(我已存储用户名)。但textField不更新。任何想法?这是我的加载方法:将文本设置为文本字段的问题

public static void load() 
{ 
    Properties prop = new Properties(); 
    InputStream input = null; 

    try { 

     input = new FileInputStream("config.properties"); 
     prop.load(input); 

     textField.setText(prop.getProperty("user")); //not updating!!!! 

     } catch (IOException ex) { 
     ex.printStackTrace(); 
    } finally { 
     if (input != null) { 
      try { 
       input.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
+2

_config.properties_的内容是什么? – Berger

+1

在这种情况下,从更简单的代码开始 - 用'textField.setText(“IsThisTextShown?”);''替换'load()'方法中的所有代码。然后,验证这是否成功 - 您会看到它是属性文件还是文本字段的问题。另外,为什么该方法“静态”?你应该添加一个[mcve]。 –

+0

我这样做了。但仍然textField不更新。是否有任何害处使用静态?我通常这样做,因为它简化了我的编码过程。 –

回答

0

添加到上面的安德烈亚斯Fester说。您应该首先检查文件,如果存在或不存在,这将允许您验证您是否指向项目根目录下的正确目录。还增加一个条款说像if(prop.getProperty("user")==null){//handle null}然后还尝试使用textField.append("text");正好看到一个不同的方法,然后通过做System.out.println("TextField: "+textField.getText()),看它是否是设置文本

如果有什么看甲骨文提供给使用文本框this demo验证。另外它是一个很好的实践,以知道何时分离成员变量(属于实例)或类变量(静态),我会避免像提供的演示中的静态。

希望这有助于。

+0

我删除了load()方法的全部内容,并将其替换为'textField.setText(“Jack”)但它仍然不起作用。 –

+0

你检查过什么textField.getText()返回? –

+1

也发布你的代码,你将它添加到JPanel等 –

0

感谢您的帮助,guys.I想通了problem.Actually,我宣布文本框为:

静态的JTextField文本字段=新的JTextField();

外主(),然后再次为:

的TextField =新的JTextField();

里面的constructor.I删除了一个里面的构造函数,它解决了这个问题。

再次感谢大家的帮助。

+0

我刚刚编辑我的答案,指向你的非静态方向,很好的工作! –