Задать вопрос
  • Как импортировать исходники JAVA в Eclipse?

    EugeneP2
    @EugeneP2
    Java Dev
    Для этого существуют Maven / Gradle

    update:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>org.mmocore</groupId>
      <artifactId>authserver</artifactId>
      <version>0.0.1</version>
    
      <name>authserver</name>
    </project>


    Потом правой кнопкой по проекту: Configure -> Convert to Maven Project
    Ответ написан
    Комментировать
  • Какую литературу лучше почитать по Maven (На русском)?

    EugeneP2
    @EugeneP2
    Java Dev
    По честному, на русском ничего путевого нет, ни литературы, не видео.

    Хоть вопрос на насчет русского языка, но я бы порекомендовал посмотреть обучающее видео "O'Reilly - Learning Apache Maven", к вашему сожалению на английском языке.
    Ответ написан
    Комментировать
  • Как библиотеку засунуть вместе с самой программой?

    EugeneP2
    @EugeneP2
    Java Dev
    Используйте maven

    Если хотите собрать исполнимы jar файл с включенным в него зависимостями, я использую maven-assembly-plugin:
    <packaging>jar</packaging>
       ....
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-assembly-plugin</artifactId>
    				<configuration>
    					<archive>
    						<manifest>
    							<mainClass>ru.toster.MainClass</mainClass>
    						</manifest>
    					</archive>
    					<descriptorRefs>
    						<descriptorRef>jar-with-dependencies</descriptorRef>
    					</descriptorRefs>
    				</configuration>
    				<executions>
    					<execution>
    						<id>make-assembly</id> <!-- this is used for inheritance merges -->
    						<phase>package</phase> <!-- bind to the packaging phase -->
    						<goals>
    							<goal>single</goal>
    						</goals>
    					</execution>
    				</executions>
    			</plugin>
     </build>
    ...


    потом в командной строке

    mvn assembly:single

    Для сборки war архива никаких доп. плагинов можно не прописывать, а запустить команду
    mvn package

    в pom файле указать только тип архива "war"
    <packaging>war</packaging>

    Если не пользуетесь mvn, в IDE обычно есть встроенные средства для сборки, например в Eclipse IDE:
    File -> Export -> Runnable Jar File -> Package required libraries into generated JAR


    Можно собрать исполнимый jar файл вручную и запаковать в него все нужные библиотеки jar, но сами библиотеки должны бить в распакованном виде, т.е. prog.jar/lib/MySql.jar - такой работать не будет, джава не может грузить джары из джаров:) Нужно будет все либы распаковать вручную, чтоб было: prog.jar/com.mysql.MySqlDriver.class (это пример).

    Например когда вы используете Eclipse для сборки, он встраивает свой загрузчик в архив, потому jar/jar работает. А выше указанный maven плагин как раз распаковать все архивы зависимостей.
    Ответ написан
    2 комментария
  • Как узнатьсколько строк вернул запрос?

    EugeneP2
    @EugeneP2
    Java Dev
    Никак не узнать.

    Или перед основным запросом выполнить SELECT count(*) FROM TABLE
    Ответ написан
    Комментировать
  • Ошибка (code=13) сразу при попытке установить Eclipse на Win?

    EugeneP2
    @EugeneP2
    Java Dev
    Я так понял, что у вас установлена джава под 32-х разрядную ось, и вы пытаетесь запустить эклипс 64 с использование этой джваву.

    Или у вас не под ту разрядность сось джава стоит или вы не тот эклипс скачали
    Ответ написан
    6 комментариев
  • Как сделать вечный цикл с обработкой каждых 100 миллисекунд (Android)?

    EugeneP2
    @EugeneP2
    Java Dev
    Можно воспользоваться стандартным джава таймером

    import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class App 
    {
        public static void main( String[] args )
        {
    
        	Timer timer = new Timer();
        	timer.schedule(new TimerTask() {
    			@Override
    			public void run() {
    				System.out.println("Hello");
    			}
    		}, new Date(), 100);
        }
    }
    Ответ написан
    Комментировать
  • Как реализовать в Java возврат к началу класса?

    EugeneP2
    @EugeneP2
    Java Dev
    Как то так обычно это делается
    package ru.toster.java.q241826;
    
    import java.util.Date;
    import java.util.Scanner;
    
    public class App {
    
    	public static void main(String[] args) {
    
    		Scanner scnr = new Scanner(System.in);
    
    		while (true) {
    
    			System.out.print("enter command>");
    			String command = scnr.nextLine();
    
    			if ("help".equals(command)) {
    				printListCommand();
    			} else if ("date".equals(command)) {
    				printDate();
    			} else if ("time".equals(command)) {
    				printTime();
    			} else if ("exit".equals(command)) {
    				System.out.println("Good Bye!");
    				break;
    			} else {
    				System.out.println("Unknown command! Please enter 'help'");
    			}
    
    		}		
    		scnr.close();
    	}
    	
    	private static void printTime() {
    		System.out.printf("%1tT\n", new Date());		
    	}
    
    	private static void printDate() {
    		System.out.printf("%1tY-%1$tm-%1$td\n", new Date());		
    	}
    
    	private static void printListCommand() {
    		System.out.println(
    				"'help'\tprint list commands;\n" + 
    				"'exit'\texit from programm;\n" + 
    				"'date'\tprint today's date;\n" + 
    				"'time'\tprint current time;");
    	}
    }
    Ответ написан
    3 комментария
  • Что учить, никак не определюсь?

    EugeneP2
    @EugeneP2
    Java Dev
    В первую очередь нужно смотреть на рынок труда, какие языки в топе. Имхо, что бы стать востребованным С++ программистом, нужно приложить больше усилий, чем для той же Java.
    Ответ написан
    2 комментария
  • Стоит ли изучать Swing?

    EugeneP2
    @EugeneP2
    Java Dev
    Не трать время. Учи web
    Ответ написан
    3 комментария
  • Getter,setter для чего нужны?

    EugeneP2
    @EugeneP2
    Java Dev
    Это одно из соглашений для класса, что бы он мог использоваться как Java Bean

    Свойства класса должны быть доступны через get, set и другие методы (так называемые методы доступа), которые должны подчиняться стандартному соглашению об именах. Это легко позволяет инструментам автоматически определять и обновлять содержание bean’ов.
    .

    + на данном соглашении работают куча различных сериализаторов xml/json, JPA

    + простые приставки к методам get и set сразу говорят для чего эти методы.

    З.Ы.
    По честному, ручное прописывание getter-ов и setter-ов давно всем надоело и избыточно, потому в современных JVM языках, типа Groovy или Scala методы доступа генерируются автоматически компилятором. Для Java есть фреймверк Lombok, он позволяет автоматически генерировать методы доступа к полям.
    Ответ написан
    Комментировать
  • Используете ли вы реляционные и документоориентированные субд в одном проекте?

    EugeneP2
    @EugeneP2
    Java Dev
    Транзакция хранятся в монгодб, но параллельно приходится проливать часть данных в SybaseIQ. Это нужно в основном для расчета различных извращенный отчетов для бизнеса, в монге такое посчитать не выйдет.
    Ответ написан
    3 комментария
  • Может ли servlet обрабатывать несколько страниц?

    EugeneP2
    @EugeneP2
    Java Dev
    Используйте паттерн Model-View-Controller.

    Например, у вас есть приложение Контакты.

    Сервлет будет контроллером обрабатывающий различные манипуляции с контактами.
    Для отображения результатов, форм, списков - используйте jsp

    Вот простенький пример контроллера (сервлета), который обрабатывает CRUD операции с контактами
    @WebServlet(urlPatterns = "/contact")
    public class ContactController extends HttpServlet {
    
    	private ContactDao contactDao = new HashMapContactDao();
    	
    	@Override
    	protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		contactDao.removeById(Long.valueOf(req.getParameter("id")));
    		this.doGet(req, resp);
    	}
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		List<Contact> contactList = contactDao.findAll();
    		req.setAttribute("contactList", contactList);
    		req.getRequestDispatcher("view/contact.jsp").forward(req, resp);
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		
    		Contact newContact = new Contact();
    		newContact.setLastName(req.getParameter("lastName"));
    		newContact.setFirstName(req.getParameter("firstName"));
    		newContact.setPhone(req.getParameter("phone"));
    		
    		this.contactDao.add(newContact);
    
    		this.doGet(req, resp);
    	}
    
    	@Override
    	protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		
    		Contact newContact = new Contact();
    		newContact.setId(Long.valueOf(req.getParameter("id")));
    		newContact.setLastName(req.getParameter("lastName"));
    		newContact.setFirstName(req.getParameter("firstName"));
    		newContact.setPhone(req.getParameter("phone"));
    
    		this.contactDao.update(newContact);
    		
    		super.doPut(req, resp);
    	}
    }


    Отображение (view) контактов view/contact.jsp
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Список контактов</title>
    <style type="text/css">
    table {
    	border-collapse: collapse;
    }
    
    table, td, th {
    	border: 1px solid black;
    }
    </style>
    </head>
    <body>
    
    	<h1>Список контактов</h1>
    
    	<form method="post">
    		<fieldset>
    			<legend>Новый контакт</legend>
    			<p>
    				<label>Фамилия: <input type="text" name="lastName" /></label>
    			</p>
    			<p>
    				<label>Имя: <input type="text" name="firstName" /></label>
    			</p>
    			<p>
    				<label>Номер телефона: <input type="text" name="phone" /></label>
    			</p>
    			<p>
    				<button>Создать</button>
    			</p>
    		</fieldset>
    	</form>
    
    	<table style="border: 1px solid black;">
    		<tr>
    			<th>№</th>
    			<th>Фамилия</th>
    			<th>Имя</th>
    			<th>Номер телефона</th>
    		</tr>
    
    
    		<c:if test="${contactList != null}">
    			<c:forEach items="${contactList}" var="c">
    
    				<tr>
    					<td>${c.id}</td>
    					<td>${c.lastName}</td>
    					<td>${c.firstName}</td>
    					<td>${c.phone}</td>
    				</tr>
    
    			</c:forEach>
    		</c:if>
    	</table>
    
    </body>
    </html>


    Модель
    public class Contact {
    
    	private Long id;
    	private String lastName;
    	private String firstName;
    	private String phone;
    
    	public Contact() {
    	}
    
    	public Contact(String lastName, String firstName, String phone) {
    		this.lastName = lastName;
    		this.firstName = firstName;
    		this.phone = phone;
    	}
    
    	public Long getId() {
    		return id;
    	}
    
    	public void setId(Long id) {
    		this.id = id;
    	}
    
    	public String getLastName() {
    		return lastName;
    	}
    
    	public void setLastName(String lastName) {
    		this.lastName = lastName;
    	}
    
    	public String getFirstName() {
    		return firstName;
    	}
    
    	public void setFirstName(String firstName) {
    		this.firstName = firstName;
    	}
    
    	public String getPhone() {
    		return phone;
    	}
    
    	public void setPhone(String phone) {
    		this.phone = phone;
    	}
    
    
    	@Override
    	public String toString() {
    		return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
    	}
    }


    А доступ к данным и их манипуляциями мы отделяем слоем DAO (простенькая реализация на основе HashMap). Благодаря интерфейсу, в будущем мы сможем подставить любую реализацию, например хранение контактов в базе данных.

    public class HashMapContactDao implements ContactDao {
    
    	private AtomicLong idCounter = new AtomicLong();
    	private Map<Long, Contact> map = new ConcurrentHashMap<Long, Contact>();
    	
    	@Override
    	public List<Contact> findAll() {
    		return new ArrayList<Contact>(this.map.values());
    	}
    
    	@Override
    	public void removeById(Long id) {
    		this.map.remove(id);
    	}
    
    	@Override
    	public Contact add(Contact contact) {
    		Long newId = this.idCounter.incrementAndGet();
    		contact.setId(newId);
    		this.map.put(newId, contact);
    		return contact;
    	}
    
    	@Override
    	public void update(Contact contact) {
    		this.map.put(contact.getId(), contact);
    	}
    }


    З.Ы.
    Хоть это и "низкий уровень", но с ним разобраться нужно. Потом конечно лучше использовать Spring MVC
    Ответ написан
    3 комментария
  • Какая разница между этими способами ввода?

    EugeneP2
    @EugeneP2
    Java Dev
    Вместе с JDK можно скачать и исходный код стандартных библиотек джавы. В любой IDE, зажав CTRL и кликнув по имени того, или иного класса, можно перейти к его исходному коду и полюбопытствовать, что же там такое происходить...

    В вашем примере мы видим два конструктора, один принимает символьный поток (Reader), а другой - байтовый поток ("сырые" данные) (InputStream).

    Scanner предназначен для удобного чтения текста из потока, т.е. ему нужен символьный поток (Reader). А что он делает с байтовым поток? - правильно, оборачивает его в Reader:) И если зайти в код конструктора, то мы это увидем:
    public Scanner(InputStream source) {
            this(new InputStreamReader(source), WHITESPACE_PATTERN);
        }

    Все просто, в зависимости от доступного вам потока (Reader/InputStream), вы используете соответствующий конструктор Scanner-а. В вашем примере оба варианта делают одно и тоже.

    Библиотека java.io состоит из декораторов (паттерн такой), они как матрешки, вкладывая их один в другой, вы добавляете функционал.

    Байтовы поток, а нужен символьный? - пффф... обвернули его InputStreamReader. Нужна буферизация? - легко, Обвернули в BufferedReader.
    Ответ написан
    1 комментарий
  • Как создать сайт на javaEE?

    EugeneP2
    @EugeneP2
    Java Dev
    Для начала разберитесь с Servlet API, поставьте Tomcat, напишите сервлет. Потом JSP + JSTL
    Ответ написан
    1 комментарий
  • Греется macbook pro?

    EugeneP2
    @EugeneP2
    Java Dev
    Тяжелый страницы в браузере довольно ресурсоемкая штука. Я вот когда тесты в лингволео прохожу... греется, и система охлаждения гудеть начинает
    Ответ написан
    Комментировать
  • Нужна ли продукция apple для создания приложений на java?

    EugeneP2
    @EugeneP2
    Java Dev
    По-моему в iOS нет джавы. Пишут на ObjectiveC
    Ответ написан
    3 комментария
  • Как на Java массив пикселей записать в иображение?

    EugeneP2
    @EugeneP2
    Java Dev
    public static void main(String[] args) throws IOException {
    		
    		BufferedImage png = ImageIO.read(new File("image.png"));
    		
    		Color color = new Color(0, 0, 0);
    		
    		png.setRGB(2, 2, color.getRGB());
    		
    		ImageIO.write(png, "png", new File("image.png"));
    
    	}
    Ответ написан
    5 комментариев