Java-компилятор видит ссылку как переменную?
Я работал над проектом колледжа в течение последнего месяца, и пока все идет хорошо.
Я кодировал его на Java, и прямо сейчас я пытаюсь протестировать свою программу, скомпилировав ее и запустив файл .class. Я компилирую его в cmd (Командная строка).
Когда я пытаюсь скомпилировать его, он показывает 4 ошибки "не могу найти символ", все они указывают переменную. Я обнаружил, что все эти "переменные" на самом деле являются именами классов, которые я использую для вызова других классов в других файлах.
Ошибка повторяется для следующих имен классов: "TempFiles", "ExplorerHistory", "Downloads"и " RecycleBin".
Вот код, который вызывает классы:
if(chckbxTemporaryFilesUser.isSelected()) { TempFiles.deleteTemporaryFiles(); } if(chckbxFileExplorerUser.isSelected()) { ExplorerHistory.deleteExplorerHistory(); } if(chckbxDownloadsUser.isSelected()) { Downloads.deleteDownloads(); } if(chckbxRecycleBinUser.isSelected()) { RecycleBin.deleteRecycleBin(); }
Как вы можете видеть, код проверяет, установлен ли определенный флажок, а затем вызывает класс и метод. Например, если установлен флажок "загрузки", он вызывает класс" загрузки "и метод" deleteDownloads " внутри этого класса.
Как работает программа, вы выбираете флажок, нажимаете кнопку, и в зависимости от того, какие флажки вы выберете, она будет вызывать классы из других файлов, которые выполняют требуемую процедуру.
Вот начало моего основного класса, показывающего все методы в нем и весь импорт (я удалил большую часть иррелевантного кода и оставил только методы):
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import javax.swing.*; import java.awt.*; public class Pither implements ActionListener { private JFrame frame; public static void main(String[] args) { } public Pither() { initialize(); } private void initialize() { } @Override public void actionPerformed(ActionEvent e) { /* This is where the classes are being called from. aka where the "if" statements are. */ }
А вот и начало класса TempFiles:
import java.io.File; import java.io.IOException; public class TempFiles { private static final public static void main(String[] args) { deleteTemporaryFiles(); } public static void deleteTemporaryFiles() { } public static void delete(File file)
Вот точные ошибки, которые отображаются в cmd:
Pither.java:422: error: cannot find symbol TempFiles.deleteTemporaryFiles(); ^ symbol: variable TempFiles location: class Pither Pither.java:426: error: cannot find symbol ExplorerHistory.deleteExplorerHistory(); ^ symbol: variable ExplorerHistory location: class Pither Pither.java:430: error: cannot find symbol Downloads.deleteDownloads(); ^ symbol: variable Downloads location: class Pither Pither.java:434: error: cannot find symbol RecycleBin.deleteRecycleBin(); ^ symbol: variable RecycleBin location: class Pither
Операторы " if " находятся в конце основного класса, поэтому 422-434 подтверждает, что именно они вызывают ошибки.
P.S. Пожалуйста, попробуйте говорить на "базовом уровне", так как я все еще довольно новичок в Java и начал изучать его менее 2 месяцев назад.
Что я уже пробовал:
Я попытался удалить все, что я добавил в код до того, как проблема впервые возникла, но ошибки все еще были там, и были те же самые.
Я также попытался удалить один блок кода за раз, и я уверен, что код, вызывающий классы, вызывает ошибки.
Jochen Arndt
Ошибки говорят вам, что компилятор не знает этих классов.
Так где же они объявлены?
Denisowator
Они объявляются в отдельных файлах, расположенных в той же папке, что и основной исходный код. (надеюсь, это имеет смысл, я довольно плохо объясняю вещи)
Как я уже сказал, раньше он работал нормально, но теперь вдруг выдает мне эти ошибки при компиляции. Должен ли я включать внешние файлы в путь к классу при компиляции?
Я также не упомянул, что использую внешние банки, и их команды давали аналогичные ошибки. И после включения их в путь к классам во время компиляции ошибки были исправлены. Так что, может быть, это сработает, если я включу файлы классов, которые вызывают операторы if?
Jochen Arndt
Тогда вы, вероятно, забудете их импортировать. Видишь https://docs.oracle.com/javase/tutorial/java/package/usepkgs.html.
Denisowator
Я прочитал связанную веб-страницу, но все еще в замешательстве. Что бы я точно поместил в строку импорта, чтобы направить код в эти файлы?
Просто если это будет полезно, вот текущий адрес каталога для файлов класса: "C:\Users\Denisowator\workspace\Pither\bin".
Jochen Arndt
Смотрите мое решение.
В целом вы должны прочитать некоторые учебные пособия по управлению проектами Java (связанные с используемой IDE).