Примечание: это не дубликат таких вопросов, как this, потому что они пытаются вызвать методы экземпляра для классов, а не экземпляров. Моя заключается в том, что я пытаюсь вызвать метод экземпляра для экземпляра, и он все еще дает ошибку.Java: Нестационарная переменная не может ссылаться на статический контекст при вызове экземпляра класса
Я получаю классическую ошибку, возникающую при попытке вызвать метод экземпляра для класса. Моя проблема в том, что я пытаюсь вызвать метод экземпляра для экземпляра, и я получаю эту ошибку. Мой код:
public class PixelsManipulation{
// Load in the image
private final BufferedImage img = getImage("strawberry.jpg");
Sequential sequentialGrayscaler = new Sequential(img, 2, 2);//img.getWidth(),img.getHeight());
public static void main(String[] args) {
// Sequential:
long startTime = System.currentTimeMillis();
sequentialGrayscaler.ConvertToGrayscale(); // error here
// ... etc.
}
Почему это может случиться? Есть ли что-то действительно очевидное, что я пропустил? Я объявил экземпляр Sequential, называемый sequentialGrayscaler, и я пытаюсь вызвать на нем ConvertToGrayscale(), а не сам класс.
Последовательный код просто:
public class Sequential {
private int width, height; // Image params
private BufferedImage img;
// SEQUENTIAL
// Load an image from file into the code so we can do things to it
Sequential(BufferedImage image, int imageWidth, int imageHeight){
img = image;
width = imageWidth;
height = imageHeight;
}
public void ConvertToGrayscale(){
// etc.
EDIT: Если я закомментировать изображение и просто создать экземпляр объекта Sequential с целым Params, он работает. Поэтому проблема должна быть связана с BufferedImage.
Вот код, который я использую для чтения в изображениях:
private static BufferedImage getImage(String filename) {
try {
InputStream in = getClass().getResourceAsStream(filename); // now the error is here
return ImageIO.read(in);
} catch (IOException e) {
System.out.println("The image was not loaded. Is it there? Is the filepath correct?");
System.exit(1);
}
return null;
}
Последнее место, где я могу «Погоня» ошибка в это линия, где я создаю InputStream. Ошибка есть «нестатический метод getClass() нельзя ссылаться из статического контекста». Это делается после объявления Sequential static вместе с методом ConvertToGrayscale(). Это после того, как говорят:
private static BufferedImage img = getImage("strawberry.jpg");
private static Sequential sequentialGrayscaler = new Sequential(img, 2, 2);
И делает GetImage() статические, а также (что нужно сделать, что в противном случае я получаю ошибку, когда я пытаюсь создать BufferedImage).
EDIT: В конечном итоге мне просто пришлось перенести метод getImage() из моего основного класса и в класс Sequential. В идеале я не хотел этого делать, потому что это, вероятно, означает, что у меня будет много дублирующих методов getImage(), если я хочу реализовать их в других классах, но по крайней мере сейчас это работает.
Попробуйте следующее: 'private static Sequential sequentialGrayscaler = new Sequential (img, 2, 2);' – user2004685
Это устраняет ошибку в main(), но она просто перемещает ее в getImage(), когда я пытаюсь создать InputStream. – Touchdown
Отправить этот ответ http://stackoverflow.com/questions/35094934/how-do-you-access-a-static-variable-of-an-object-in-java/35095535#35095535 – thedarkpassenger