Помогите пожалуйста

131
12 октября 2019, 21:40

Всем доброго времени суток. Являясь полнейшим профаном в программировании в целом я наткнулся на сайт http://strolen.com/viewing/Cryptic_Language_-_Times_Ultra-New_Roman

Меня заинтересовал данный вид написания символов, и в самом низу этой статьи есть ссылка на архив, как я понял, для написания их посредством Java-машины. После загрузки этого архива в нём я обнаружил 2 файла с расширением .java : CharacterLibrary и Main. После продолжительного воскуривания мануалов по данной прекрасной среде программирования мной была установлена Java-машина jdk, были со скрипом прописаны пути к bin, в настройках были прописаны пути PATH, и после того как я через консоль пытался компилировать командой javac файл MAIN, консоль ругается вот таким матом:

main.java:32: error: cannot find symbol Y = CharacterLibrary.drawCharacter(g, X, Y, ^ symbol: variable CharacterLibrary location: class Main main.java:46: error: cannot find symbol Y = CharacterLibrary.drawConnect(g,X,Y); ^ symbol: variable CharacterLibrary location: class Main main.java:60: error: cannot find symbol Y = CharacterLibrary.drawCharacter(g, X, Y, ^ symbol: variable CharacterLibrary location: class Main main.java:74: error: cannot find symbol Y = CharacterLibrary.drawConnect(g,X,Y); ^ symbol: variable CharacterLibrary location: class Main 4 errors

Пожалуйста, объясните дебилу, как заставить работать данные файлы.

Answer 1
  1. Похоже, у вас установлено несколько разных версий Java и возникла путаница с ними (разные переменные среды оказались в несогласованном состоянии). Проще всего, пожалуй, деинсталлировать их все, почистить переменные среды path и classpath, чтобы там не осталось никаких упоминаний о java, и установить какую-то одну версию JDK.
  2. После установки JDK убедитесь, что компилятор и виртуальная машина доступны и относятся к одной версии. Для этого из консоли выполните команды java -version и javac -version. Вы должны увидеть что-то вроде java version "1.8.0_201" и javac 1.8.0_201 соответственно. Кстати, советую для таких вещей использовать не стандартную виндовскую консоль, а какой-нибудь файловый менеджер типа far, это намного удобней, видна структура директорий и файлы.
  3. Создайте какую-нибудь директорию или воспользуйтесь готовой, но чтобы не путаться, лучше, чтобы в ней не было ничего постороннего. Назовем ее условно C:\myDir. В ней создайте поддиректорию alientextgenerator и в эту поддиректорию поместите файлы с исходниками (Main.java и CharacterLibrary.java).
  4. Зайдите в поддиректорию командой cd C:\myDir\alientextgenerator или файловым менеджером. По команде dir или в окне файлового менеджера вы должны видеть свои файлы. В исходной программе есть глупость, которая помешает ей работать -- она будет пытаться создать файл в несуществующей директории. Исправьте -- любым текстовым редактором откройте Main.java, найдите там строку

    ImageIO.write(myImage, "gif", new File("C:\\Users\\Tim\\Desktop\\" + fileName));

    (Это почти в самом конце) и замените ее на

    ImageIO.write(myImage, "gif", new File(fileName));

  5. Оставаясь в той же поддиректории, откомпилируйте файлы командой javac Main.java CharacterLibrary.java. Должны появиться файлы Main.class и CharacterLibrary.class.

  6. Выйдите из поддиректории в директорию C:\myDir и запустите программу комндой java alientextgenerator/Main. Она должна отработать и в вашей текущей директории (C:\myDir) записать файл example_sentence.png с нужными вам картинками.

Что именно вы делали не так и почему у вас не получалось, сказать трудно. Алгоритм, который я описал -- не единственный, все это можно проделать и другими способами, но мне показалось, что для новичка этот способ наиболее прост.

Эти фокусы с поддиректорий alientextgenerator, которые могут показаться бессмысленными, обусловлены принятым в Java правилом -- классы должны находиться в поддиректориях, чьи названия соответствуют названиям пакетов. В ваших фалах указан пакет -- package alientextgenerator;, значит файлы *.class должны находиться в поддиректории .\alientextgenerator. Если у вас в исходном файле написано package com.my.package;, виртуальная машина будет искать соответствующий .class файл в поддиректории \com\my\package\ относительно вашей текущей директории и относительно директорий, перечисленных в переменной среды classpath и в ключе -cp, указанном при запуске JVM из командной строки.

А вообще надо сказать, что jdk в чистом виде используется крайне редко, в каких-то экзотических ситуациях. Обычно все используют IDE, такие как Eclipse, IntelliJ IDEA и проч. Если всё идет нормально, программист зачастую может годами не вспоминать ключи компилятора или опции виртуальной машины, но разобраться с этим хотя бы раз -- нужно. А разбираться с JDK и JVM (как и с программированием на Java) я бы советовал для начала не по мануалам, а по хорошим учебникам -- напр. Хорстман, "Java SE 8. Базовый курс" (Cay S. Horstmann. Core Java for the Impatient)

Answer 2

Вы компилируете только один класс Main, но не CharacterLibrary

javac -d /путь/к/папке/с/исходниками Main.java

READ ALSO
Работа с двумя коллекциями MongoDB

Работа с двумя коллекциями MongoDB

Есть база данныхВ ней создаю 2 коллекции для работы с ними

113
Polynom( ) in Polynom cannot be applied to (float[], double)

Polynom( ) in Polynom cannot be applied to (float[], double)

Только начала изучать Java, возникает ошибка "Polynom( )  in Polynom cannot be applied to (float[], double)" во втором кодеМожете объснить, что она значит и как её исправить?...

130
paintComponent не рисует, а приложение зависает

paintComponent не рисует, а приложение зависает

Делаю Progressbar и paintComponent должен по чуть-чуть заполнять полосуНаписал следующие методы:

102
Отступ в Navigation Menu

Отступ в Navigation Menu

Возможно ли добавить divider со своим цветом в 5dp или Bottom margin в 5dp для итемов Navigation меню?

121