我在文件MovieReader中编写了getMethod,如果我在此文件中打印此方法,则一切工作正常。

import java.io.BufferedReader; // scanner
import java.io.FileReader;
public class MovieReader {

    private static String text;

    public static void main(String args[]) throws Exception {
        FileReader file = new FileReader("C:/Users/krystian/Desktop/filmDateBaseProject/movies.txt");
        BufferedReader reader = new BufferedReader(file);
        text = "";
        String line = reader.readLine();
        while(line != null) {
            text+= line +"\n";
            line=reader.readLine();
        }
        reader.close();
        System.out.println(getText()); // This method works
    }

    public static String getText() {
        return text;
    }

}

但是,当我尝试从其他文件调用此方法时,它的输出为null

public class Userr{

   public static void main(String args[]){

      MovieReader user = new MovieReader();

      System.out.println(user.getText());

  }
}

你能帮我吗?

#1楼 票数:2

MovieReader类中,您加载文件并在main()方法中填充text内容。 创建新的MovieReader对象时,不会执行main()方法,因此不会初始化text字段。

您可以在MovieReader创建一个静态加载器方法, MovieReader代码从main()移到那里,如下所示:

public static void loadMovieInfo() {
    FileReader file = new FileReader("C:/Users/krystian/Desktop/filmDateBaseProject/movies.txt");
    ... // rest of the code
    reader.close();
}

在尝试调用getText()之前,只需调用此方法即可:

MovieReader.loadMovieInfo();
System.out.println(MovieReader.getText());

如果要在创建对象时加载文件并填充text内容,则可以将text转换为实例变量,然后在MovieReader构造函数中加载文件信息。

例:

public class MovieReader {
    private String text;

    public MovieReader() {
        FileReader file = new FileReader("C:/Users/krystian/Desktop/filmDateBaseProject/movies.txt");
        BufferedReader reader = new BufferedReader(file);
        this.text = "";
        String line = reader.readLine();
        while(line != null) {
            this.text += line +"\n";
            line=reader.readLine();
        }
        reader.close();
    }

    public String getText() {
        return this.text;
    }
}

然后这应该工作:

MovieReader user = new MovieReader();
System.out.println(user.getText());

另外,有以下几点观察:

  • 静态方法属于该类(而不是特定对象),并且应使用该类的名称来调用:

     MovieReader.getText() 
  • 您应该使用StringBuilderdocs此处 )代替String串联来填充text变量的内容。

#2楼 票数:0

试试这个。

import java.io.BufferedReader; // scanner
import java.io.FileReader;
public class MovieReader {

    private static String text;

    public static String getText() {

        FileReader file = new FileReader("C:/Users/krystian/Desktop/filmDateBaseProject/movies.txt");
        BufferedReader reader = new BufferedReader(file);
        text = "";
        String line = reader.readLine();
        while(line != null) {
            text+= line +"\n";
            line=reader.readLine();
        }
        reader.close();
        System.out.println(getText()); // This method works
        return text;
    }

}

public class Userr{

   public static void main(String args[]){

      MovieReader user = new MovieReader();

      System.out.println(user.getText());

  }
}

#3楼 票数:0

快速而肮脏的修复方法:调用MovieReader.main方法。

更长的答案是,您应该如何实际执行:您可能来自像python这样的脚本背景。 您在这里所做的基本上是创建两个包装在类中的脚本。 调用java时,有一个类作为入口点,其主方法被调用。

因此,您创建了一个加载文件的脚本,另一个创建了读取文件的脚本,您的期望是调用了两个主要方法。 您需要返回设计!

更好的方法是在MovieReader中仅具有最小的main(),而使用诸如readMovies()之类的方法,由main()调用。 然后,在调用getText()之前,也让User.main()调用该方法。

不要把所有逻辑都放在主要

#4楼 票数:0

首先,您应该使用类名调用静态getText()方法。

MovieReader.getText()

二,静态字符串的默认值:

It's initialized to null if you do nothing, as are all reference types.

因为,您没有做任何事情,所以text的值为null。

请参考以下固定代码:

MovieReader类

public class MovieReader {

 private static String text;

 public static void main(String args[]) throws Exception {
    FileReader file = new FileReader("C:/Users/krystian/Desktop/filmDateBaseProject/movies.txt");
    BufferedReader reader = new BufferedReader(file);
    text = "";
    String line = reader.readLine();
    while(line != null) {
        text+= line +"\n";
        line=reader.readLine();
    }
    reader.close();
    System.out.println(getText()); // This method works
 }

 public static String getText() {
    return text;
 }

}

用户类:

public class Userr{

   public static void main(String args[]){


      try {
        MovieReader.main(null);
    } catch (Exception e) {

        e.printStackTrace();
    }

      System.out.println(MovieReader.getText());

  }
}

#5楼 票数:0

假设您正在运行Userr类的main()方法。

MovieReader类的main()方法和getText()方法彼此独立。 如果要调用getText()方法,它将返回text变量的值,而无需对其进行任何操作MovieReadermain()方法的cos操作将不会执行。 这就是为什么您没有得到预期的结果。

尝试如下重构您的代码。

public class Movie {

    public static void main(String[] args) {
        MovieReader user = new MovieReader();
        String file = "C:/Users/krystian/Desktop/filmDateBaseProject/movies.txt";
        System.out.println(user.getText(file));
    }
}

还有MovieReader类,

class MovieReader {

    private String text;

    String getText(String fileName) {
        FileReader file;
        file = null;
        try {
            file = new FileReader(fileName);
            BufferedReader reader = new BufferedReader(file);
            text = "";
            String line = reader.readLine();
            while (line != null) {
                text += line + "\n";
                line = reader.readLine();
            }
            reader.close();
            return text;
        } catch (FileNotFoundException ex) {
            Logger.getLogger(MovieReader.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(MovieReader.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                file.close();
            } catch (IOException ex) {
                Logger.getLogger(MovieReader.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return null;
    }
}

使用异常处理始终是一个好习惯。

  ask by krychuq translate from so

未解决问题?本站智能推荐:

1回复

我的 getMethod 不返回 setMethod 中的值:Java

我有这个挑战,我无法理解。 当我在 main 方法中运行代码时,get 方法不会返回 set 方法中设置的名称"Evander OA" 。 实际上,我的 get 方法都没有得到我需要它们得到的任何东西。
2回复

返回java字符串而不是返回null

我写了方法'charCount()'返回字符串'chc',但是netbean强迫我返回null。 “ return null”是否也禁止我在此方法之外使用“ chc”,否则它会很好地返回。 对Java来说是新手,我很困惑。 我需要帮助纠正此代码,以避免返回null。
4回复

Java字符串返回为null

我正在尝试让一个类从另一类返回字符串,尽管我得到的返回值为null。 我有一个set方法可以在原始类中设置字符串,但是在第二个类中调用该方法时,返回的是null。 这是头等舱; } 第二类,我试图在其中调用在sundaeDetails方法的println中的setFlavo
1回复

Java 2-D数组返回NULL

我正在努力创建一个“基本” UI connect4游戏。 我很难弄清楚为什么当我打电话打印“木板”时,我得到的是空值。 我不初始化数组吗? 如果是这样,我该怎么做? 〜谢谢 我的构造函数 用我的一种方法... 我也有一个toString可以打印出数组 我遇到
2回复

Java-mooc.fi-练习46:电影参考-返回地图的方法不能返回null

我有一个方法: 因此,基本概念是 其中包括另一个电影评分的HashMap作为地图值。 我的方法需要返回已评分电影的Map,因此需要这样做。 问题是,如果一个人从未对一部电影进行评分,而电影评分的HashMap为空,那么应该返回什么呢? 无法返回null。
1回复

为什么java字符串方法将null作为字符串返回? [关闭]

关闭。 此问题不可重现或由拼写错误引起。 它目前不接受答案。
3回复

返回null或throw异常

我正在开发一个简单的Web服务和客户端。 请参阅我的服务摘要: } 是否可以将null返回给客户端,然后客户端应该照顾null还是Web服务更好地照顾null并引发异常? 更新:如何返回nullpointerexception而不是返回null? 你会推荐什么?
1回复

为什么 item.getMenuInfo() 返回 null?

我一直在尝试制作一个带有菜单的简单应用程序,该菜单可以更改调用菜单的项目的背景颜色。 但是 item.getMenuInfo 返回 null,我不知道为什么。 互联网上的一些解决方案说这是因为您应该传递整个列表而不是项目。 但是我正在传递整个 ListView 但我一直收到 java.lang.N