• Как сгенерировать 14-ти значное положительное число?

    timych
    @timych
    Вот еще вариант:
    ThreadLocalRandom.current().nextLong(10000000000000L, 100000000000000L);
    Ответ написан
    Комментировать
  • Как правильно хранить файлы изображений в веб приложении?

    timych
    @timych
    Посмотрите мой ответ
    Не ручаюсь что это 100% правильное решение, но для меня довольно удобное.
    Ответ написан
    Комментировать
  • Помогиие выбрать ORM для MySQL для java?

    timych
    @timych
    Spring Data JPA + QueryDsl - очень доволен.
    Ответ написан
    Комментировать
  • Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.8:run что это такое?

    timych
    @timych
    Это значит именно то, что написано - Maven не смог выполнить комманду maven-antrun плагина "run".
    Почитайте официальные доки по настройке и запуску плагина.
    Ответ написан
    Комментировать
  • Как побороть Not on FX application thread Java FX?

    timych
    @timych
    Вызовите метод сдедующим образом:
    Platform.runLater(new Runnable() {
    
    				@Override
    				public void run() {
    					runMyMethod();
    				}
    			});
    Ответ написан
    9 комментариев
  • Где развернуть Java web приложение?

    timych
    @timych
    Если задача просто протестировать, то и запускайте на личном компьютере. В конфигурации андроид-приложения укажите ваш внешний ip и порт. Только откройте его для внешних запросов.
    Ответ написан
    2 комментария
  • Решил попробывать написать игру слова на Java, как мне решить проблему?

    timych
    @timych
    Надеюсь это не домашнее задание. Вот вам упрощенный и немного корявый вариант игры. Модифицируете его под свои нужды сами - просто лень сильно извращаться :)
    И еще пара комментариев: В Java принято имена переменных (за исключением констант) и методов писать с маленькой буквы. ИМХО Всегда блок if заключайте в скобки. Даже если это одна строчка кода.

    package wordgame;
    
    import java.util.HashSet;
    import java.util.Scanner;
    import java.util.Set;
    
    public class Game {
    
    	public static void main(String[] args) {
    		new Game().run();
    
    	}
    
    	private static final char[] VALID_CHARACTERS = new char[] { 'а', 'б', 'в',
    			'г', 'д', 'е', 'ж', 'з', 'и', 'к', 'л', 'м', 'н', 'о', 'п', 'р',
    			'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'щ', 'э', 'ю', 'я' };
    	
    	private Set<String> words; 
    
    	private int playerNumber;
    	private Scanner scanner;
    	private Character playerWordLastChar;
    
    	public void run() {
    		words =  new HashSet<String>();
    		scanner = new Scanner(System.in, "cp1251");
    		playerNumber = 1;
    		System.out.println("Игра началась! \nВведите слово!\nДля подтверждения своего ответа нажмите \"ENTER\"");
    		nextPlayerTurn();		
    	}
    
    	private void nextPlayerTurn() {
    		System.out.println("\nХод игрока " + playerNumber + "\n");
    		while (!submitTurn()) {
    		}
    
    		playerNumber = playerNumber == 1 ? 2 : 1;
    		nextPlayerTurn();
    
    	}
    
    	private boolean submitTurn() {
    		String word = scanner.nextLine();
    
    		if (word.isEmpty()) {
    			
    			System.out.println("Введите слово!");
    			return false;
    			
    		} 
    		
    		char firstChar = word.charAt(0);
    		char lastChar = word.charAt(word.length() - 1);
    		boolean submit = false;
    		
    		if(words.contains(word)) {
    			
    			System.out.println("Такое слово уже было!");
    		}
    		
    		else if (playerWordLastChar != null && firstChar != playerWordLastChar) {
    			
    			System.out.println("Слово должно начинаться на \"" +  playerWordLastChar +"\"");
    			
    		} else if (!isLastCharValid(lastChar)) {
    			
    			System.out.println("Слово не должно оканчиваться на: \"" + lastChar+ "\"");
    			
    		} else {
    			words.add(word);
    			playerWordLastChar = lastChar;
    			submit = true;
    		}
    		return submit;
    	}
    
    	private boolean isLastCharValid(char lastChar) {
    		for (char ch : VALID_CHARACTERS) {
    			if (ch == lastChar) {
    				return true;
    			}
    		}
    		return false;
    	}
    
    }


    Еще раз повторюсь - код примитивный, но он должен натолкнуть вас в правильном направлении.
    Ответ написан
    3 комментария
  • Как спроектировать структуру классов текстового редактора?

    timych
    @timych
    На swing писал только в колледже, но от нечего делать немного переписал ваш код.
    Сильно заморачиваться не стал - вариантов архитектуры много..
    Но я бы посоветовал не увлекаться обьявлением переменных как членов класса, если не планируется их использовать. Также по возможности не включайте много логики в конструктор (ИМХО)
    Ну и названия классов не очень правильные как мне кажется.
    Также различные размеры элементов и текстовые сообщения желательно обьявлять как константы.
    И не помешало бы добавить проверку -действительно ли выбранный файл - текстовый.

    package wordpad;
    
    public class RunTextEditor {
    
    	public static void main(String args[]) {	
    		
    		new Environment().run();
    
    	}
    }


    package wordpad;
    
    
    import javax.swing.*;
    import java.awt.*;
    
    // Название класса не правильное!
    public class Service extends JLabel {
    
    	private static final long serialVersionUID = 1L;
    
    	public Service() {
    		super();
    		setPreferredSize(new Dimension(200, 30));
    		setHorizontalAlignment(SwingConstants.CENTER);
    	}
    
    	public Service(String message) {
    		this();
    		setMessage(message);
    	}
    
    	public void setMessage(String message) {
    		setText(message);
    	}
    }


    package wordpad;
    
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    
    //  Я бы переименовал в  FileManager или что-то подобное 
    public class LoadFile {
    
    	private FileHandler handler;
    
    	// интерфейс обработчика можно вынести и в  отдельный класс
    	public interface FileHandler {
    		
    		void onLoad(Document document);
    
    		void onSave(Document document);
    
    		void onError(String message);
    	}
    
    	// конструктор приватный чтобы не проверять обработчик на null
    	private LoadFile() {
    	}
    
    	public LoadFile(FileHandler handler) {
    		this();
    		setHAndler(handler);
    	}
    	
    	
    	public FileHandler getHandler() {
    		return handler;
    	}
    	
    	public void setHAndler(FileHandler handler) {
    		this.handler =  handler;
    	}
    
    	public void processLoad(File file) {
    
    		if ( file == null || !file.exists()) {
    			handler.onError("No filename present");
    			return;
    		}
    
    		try {
    			FileReader fileReader = new FileReader(file);
    			String text = new String(Files.readAllBytes(Paths.get(file.getAbsolutePath())));
    			Document document = new Document(file.getName(), 0, text);
    			fileReader.close();
    			handler.onLoad(document);
    		} catch (IOException exc) {
    			handler.onError("Error opening or reading file.");
    		}
    	}
    }


    package wordpad;
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
    
    import javax.swing.JFileChooser;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    
    import wordpad.LoadFile.FileHandler;
    
    
    public class FileMenu extends JMenuBar {
    
    	private static final long serialVersionUID = 1L;
    
    	private FileMenu() {
    		super();
    	}
    
    	public FileMenu(FileHandler handler) {
    		this();
    		JMenu menu = new JMenu("File");
    		JMenuItem loadItem = new JMenuItem("Load");
    		JMenuItem saveItem = new JMenuItem("Save");
    		JFileChooser fileChooser = new JFileChooser();
    		LoadFile fileManager = new LoadFile(handler);
    
    
    		menu.add(loadItem);
    		menu.add(saveItem);
    		add(menu);
    		loadItem.addActionListener(new ActionListener() {
    
    			@Override
    			public void actionPerformed(ActionEvent e) {
    
    				int result = fileChooser.showOpenDialog(null);
    
    				if (result == JFileChooser.APPROVE_OPTION) {
    					File file = fileChooser.getSelectedFile();
    					fileManager.processLoad(file);
    				} else {
    					fileManager.getHandler().onError("No file selected.");
    				}
    			}
    		});
    		
    		//TODO добавьте сохранение сами :)
    
    	}
    }


    package wordpad;
    
    import javax.swing.*;
    
    import wordpad.LoadFile.FileHandler;
    
    import java.awt.*;
    
    // Не очень красивое название класса на мой взгляд
    public class Environment {
    
    	private JTextArea textArea;
    	private JFrame mainFrame;
    	private Service statusMessage;
    
    	private FileHandler handler = new FileHandler() {
    
    		@Override
    		public void onSave(Document document) {
    			statusMessage.setText(document.getFileName() + " saved!");
    		}
    
    		@Override
    		public void onLoad(Document document) {
    			textArea.setText(document.getContent());
    			statusMessage.setText(document.getFileName() + " loaded");
    		}
    
    		@Override
    		public void onError(String message) {
    			statusMessage.setText(message);
    		}
    	};
    
    	public Environment() {
    
    		mainFrame = new JFrame("Text Editor");
    		mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    		mainFrame.getContentPane().setLayout(new FlowLayout());
    		mainFrame.setSize(270, 420);
    
    		textArea = new JTextArea();
    		JScrollPane jScrollPane = new JScrollPane(textArea);
    		jScrollPane.setPreferredSize(new Dimension(250, 200));
    		jScrollPane.getViewport().add(textArea);
    
    		FileMenu fileMenu = new FileMenu(handler);
    
    		mainFrame.setJMenuBar(fileMenu);
    		Container container = mainFrame.getContentPane();
    		container.add(jScrollPane);
    		statusMessage = new Service();
    		container.add(statusMessage);
    
    	}
    
    	public void run() {
    		mainFrame.setVisible(true);
    	}
    }


    package wordpad;
    
    /**
     * @author Timur Nikiforov
     */
    public class Document {
    
    	private String fileName;
    	private String content;
    	// Для чего нужна позиция каретки?
    	private int caretPosition;
    
    	public Document(String fileName, int caretPosition, String content) {
    		this.setFileName(fileName);
    		this.setCaretPosition(caretPosition);
    		this.setContent(content);
    	}
    
    	public String getFileName() {
    		return fileName;
    	}
    
    	public void setFileName(String fileName) {
    		this.fileName = fileName;
    	}
    
    	public String getContent() {
    		return content;
    	}
    
    	public void setContent(String content) {
    		this.content = content;
    	}
    
    	public int getCaretPosition() {
    		return caretPosition;
    	}
    
    	public void setCaretPosition(int caretPosition) {
    		this.caretPosition = caretPosition;
    	}
    }


    ЗЫ: B как сказали выше - испульзуйте лучше JavaFX
    По поводу книги: вот неплохая и читается легко.
    Ответ написан
    4 комментария
  • Как подключиться к серверу с клиента?

    timych
    @timych
    Для того чтобы корректно протестировать сервер извне, используйте внешний IP шлюза.
    www.whatsmyip.org Тут можно посмотреть.
    Если у вас используется рутер, то в нем скорее всего необходимо настроить проброс портов.
    В вашем случае необходимо будет пробросить запросы извне на порт 9800 на компьютер в домашней сети, на котором крутится сервер.
    www.dlink.ee/ru/faq/68/275.html - пример для рутеров d-link

    Возможно еще придется открыть порт для внешних запросов в фаерволе oc.
    windows.microsoft.com/en-us/windows/open-port-wind... - инструкция для Windows
    Ответ написан
    Комментировать
  • Как записать в Map максимальное значение для каждого из ключей?

    timych
    @timych
    Просто напишите свою реализацию вставки:

    public class MyCustomMap extends HashMap<String, Integer> {
    
    	@Override
    	public Integer put(String key, Integer value) {
    		
    		Integer oldValue = get(key);
    
    		if (oldValue == null || oldValue <  value) {
    			return super.put(key, value);
    		}
    		return null;
    	}
    }
    
    
    		Map<String, Integer> maps = new MyCustomMap();
    		maps.put("A", 5);
    		maps.put("B", 2);
    		maps.put("A", 8);
    		maps.put("B", 7);
    		maps.put("A", 3);
    		maps.put("B", 3);
    		
    		System.out.println(maps.get("A"));
    		System.out.println(maps.get("B"));
    Ответ написан
    Комментировать
  • JavaFX или Swing для desktop app?

    timych
    @timych
    Хм, мне пришел запрос как к эксперту :) (Честно говоря не знаю почему) .
    Но в любом случае однозначно JavaFX. Это более современная и мощная технология. Как указали выше CSS/fxml + довольно удобный JavaFX Scene Builder.
    Ответ написан
    Комментировать
  • Поток System.in - экземпляр абстрактного класса. Как такое возможно?

    timych
    @timych
    В таких случаях сразу открывайте доки.
    docs.oracle.com/javase/7/docs/api/java/io/InputStr...
    И смотрите эту строчку:
    Direct Known Subclasses:
    AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream


    Также, как верно заметил FoxInSox, класс может быть легко инстанцирован.
    Либо иметь реализации в каких-то сторонних библиотеках.
    Ответ написан
    Комментировать
  • Как запустить сервлет на vps?

    timych
    @timych
    У меня есть подозрение что вы не знаете про WAR архивы.
    WAR
    stackoverflow.com/questions/5108019/how-to-make-wa...
    stackoverflow.com/questions/5109112/how-to-deploy-...

    PS: Файлы с расширением .java не являюся исполняемыми - это всего лишь текстовый файл, на основаниии которого компилируется исполняемый код - файлы с расширением .class.
    Да и пакеты принято называть с маленькой буквы.
    Ответ написан
    Комментировать
  • Введение в java web разработку?

    timych
    @timych
    Можно с официального туториала:
    https://docs.oracle.com/javaee/7/tutorial/index.html

    Также неплохая книга www.rahvaraamat.ee/p/java-ee-7-%D0%BE%D1%81%D0%BD%...
    Ответ написан
    Комментировать
  • Web server на Java для мобильного приложения, куда копать?

    timych
    @timych
    Если у вас конкретно glassfish, то по авторизации можно копать в сторону JAAS
    positivecode.blogspot.com/2013/03/jaas-glassfish-3.html
    Но я бы посоветовал следующий стек : Spring security + REST (например RestEasy) + JPA (например Spring Data JPA)
    Ответ написан
    1 комментарий
  • Почему полиморфизм так работает?

    timych
    @timych
    Вот тут очень простой и понятный пример: cybern.ru/java-polymorphism.html

    Если вы хотите вызывать собственные методы в наследуемом классе (те , которые не являются переопределенными). То необходимо либо обьявлять конкретный класс, а не родительский:
    Two x = new Two();
    либо делать явное приведение типов:
    One x = new Two();
    Two z = (Two)x;
    Ответ написан
    3 комментария
  • Java создание элементов массива!?

    timych
    @timych
    По русски вы действительно не умеете писать. Из того что я понял (не уверен что правильно) - вы пытаетесь присвоить переменной, находящейся в другом классе и имеющей модификатор "final", новое значение. Читайте про модификатор "final"- opensourcerules.net/java/gl4_2.html
    Более того хорошим тоном является присваивание значений через "сеттеры" а не напрямую. К тому же у вашей переменной temp не указан модификатор доступа, а это значит что переменная будет доступна только внутри своей папки(package).

    Да и неплохо было бы выложить код и ошибки компилятора, чтобы понимать что вы пытаетесь сделать.
    Ответ написан
    Комментировать
  • А вы синхроризируете свои проекты с удаленным каким то сервисом, например гитхаб?

    timych
    @timych
    Свои личные проекты храню на bitbucket. Исключительно удобная штука, к тому же как выше сказали, приватные репозитории в отдичии от github бесплатны.
    Ответ написан
    Комментировать