Ответы пользователя по тегу Java
  • Стоит ли использовать Community Edition IntelliJ IDEA, или остаться на Eclipse?

    timych
    @timych
    Сам до последнего был сторонником Eclipse. (когда уже все коллеги пересели на idea). но когда попробовал что это такое, то понял какой эклипс все таки забагованный и неудобный по сравнению с идеей :)
    Ответ написан
    Комментировать
  • Как передать изображения на клиент?

    timych
    @timych
    Ход мыслей у вас правильный - в DTO кладете весь дескрипшн и линк на сервис выдающий изображения. Например myservice.myimageresource?imgId=12345.
    Ресурс может быть либо сервлетом либо рест ресурсом. Картинку берете из базы и сразу отдаете байтовым потоком клиенту по GET запросу. Писать во временную папку не надо.

    В ответ на ваш коммент отредактировал тут -так как тут есть теги для кода.
    Вот сильно упрощенный пример сервлета, отдающего картинку.
    public class PreviewServlet extends HttpServlet {
    	
    	private static final long serialVersionUID = 1L;
    	
    	//  это ваше DAO
    	private PreviewService previewService = Fascade.getPreviewService();
    
    @Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		response.setContentType("image/jpeg");
    		//парсим id картинки из запроса
    		int imageId = Integer.parseInt(request.getParameter("id"));
    		//Тут вы получаете  Entity вашей картинки, одно из полей у которого является массивом байт
    		Preview preview = previewService.getByImageId(imageId);
    		byte[] bytes  = preview.getBytes();
    		response.setContentLength((int) bytes.length);		
    		// получаете поток для своих нужд
    		ServletOutputStream outStream = response.getOutputStream();
    		// отсылаете картинку на клиента
    		outStream.write(bytes);
    		// закрываете поток
    		outStream.close();
    	}
    }

    Почти подобным образом можно и через рест ресурс отдать.
    Ответ написан
    2 комментария
  • На что потратить время и силы в плане программирования?

    timych
    @timych
    Выучите С++ - цены вам не будет. Сейчас сишников все меньше и меньше. Java освоите потом с легкостью, если понадобится. А вот наоборот не факт (мне вот не дается).
    Ответ написан
  • Как сделать проверку на нажатие клавиши "." на цифровой клавиатуре NumberDecimal?

    timych
    @timych
    В Java значения строк не проверяют на "==" (в отличии например от C#)
    Нужно вызвать метод .equals().

    if(myedittext.getText().toString().equals(".")) {
          // Действия
    }

    PS: В случае если возвращаемая строка длинней одного символа, то можно проверять наличие "." вызвав метод contains().
    Ответ написан
    2 комментария
  • Где я допустил ошибку?

    timych
    @timych
    package application;
    
    import java.awt.FileDialog;
    import java.awt.Frame;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;
    
    
    // Тут необязательно наследоваться от JFrame
    // Название класса  должно отображать его предназаначение
    public class BookReader {
    
    	// поля должны быть приватными
    	private FileDialog fileDialog;
    	private BookReaderCallback callback;
    
    	// Вложенный интерфейс обратного вызова
    	public interface BookReaderCallback {
    		// метод будет вызван, когда текстовый файл будет успешно прочитан до конца
    		void onReadComplete(String text);
    	}
    
    // В конструктор передаем фрейм родителя
    // не обязательно его инстанцировать в этом классе
    	public BookReader(Frame parent) {
    		fileDialog = new FileDialog(parent, "Select book", FileDialog.LOAD);
    	}
    
    	//А название метода  должно отображать его действие или результат действия
    	public void readBook() {
    
    		// show() deprecated поэтому вызываем  "setVisible"
    		fileDialog.setVisible(true);
    
    		if (fileDialog.getDirectory() == null || fileDialog.getFile() == null) {
    			return;
    		}
    
    		Scanner in = null;
    		String text = "";
    		try {
    			in = new Scanner(new File(fileDialog.getDirectory(),
    					fileDialog.getFile()));
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}
    		while (in.hasNext()) {
    			text += in.nextLine() + "\n";
    		}
    		in.close();
    		// прочитали файл и теперь через обьект класса обраьтного вызова 
    		//нотифицируем вызывающий класс о том что текст прочитан и передаем ему результат
    		if (callback != null) {
    			callback.onReadComplete(text);
    		}
    
    	}
    
    	//"ceттер" для экземпляра обратного вызова
    	public void setCallback(BookReaderCallback callback) {
    		this.callback = callback;
    	}
    }
    
    package application;
    
    import java.awt.Button;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextArea;
    import javax.swing.LookAndFeel;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    
    
    public class JFrameCreator {
    
    	public static void main(String[] args) {
    		createGUI();
    	}
    
    	public static void createGUI() {
    
    		try {
    			UIManager.setLookAndFeel((LookAndFeel) Class.forName(UIManager.getCrossPlatformLookAndFeelClassName()).newInstance());
    		} catch (InstantiationException | IllegalAccessException| ClassNotFoundException | UnsupportedLookAndFeelException e) {
    			// Игнорируем
    		}
    
    		JPanel content = new JPanel(new FlowLayout());
    		// вместо Label для текста стоит бы использовать TextArea(Label - для короткого однострочного текста),
    		JTextArea textArea = new JTextArea();
    		textArea.setText("Пока пусто...");
    		Button btnOpenFileDialog = new Button("Browse");
    		content.add(btnOpenFileDialog);
    		content.add(textArea);
    
    		JFrame frame = new JFrame("LIBRARY");
    		frame.setContentPane(content);
    		frame.setPreferredSize(new Dimension(300, 200));
    		frame.pack();
    		
    		// центрируем относительно экрана
    		frame.setLocationRelativeTo(null);
    
    		// навешиваем слушатель на кнопку 
    		// это плохой пример, скорее всего нужно навесить KeyListener, но лень имплементировать три метода
    		btnOpenFileDialog.addActionListener(new ActionListener() {
    
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				// создаем обьект BookReader
    				BookReader bookReader = new BookReader(frame);
    				// передаем ему экземпляр BookReaderCallback в виде анонимного класса
    				bookReader.setCallback(new BookReader.BookReaderCallback() {
    
    					// метод будет вызван из класса BookReader как только файл будет прочитан
    					@Override
    					public void onReadComplete(String text) {
    						// меняем текст в Label
    						textArea.setText(text);
    					}
    				});
    				// запускаем "читалку" :)
    				bookReader.readBook();
    
    			}
    		});
    
    		frame.setVisible(true);
    	}
    
    }


    Если я правильно понял задачу, то вот как примерно можно было переделать. Это все упрощенно конечно (Да я и не спец в Swing ).
    А то опять какая-то каша понаписана. Старайтесь во первых называть классы и методы адекватно. Я уже говорил кстати об этом :).
    И начинайте с основ Java. Заметно что пока плохое понятие OOП.
    Ответ написан
    6 комментариев
  • Правильный пример java+rest server?

    timych
    @timych
    docs.oracle.com/javaee/7/tutorial/jaxrs.htm#GIEPU
    Это доки. (Полная версия книги в PDF тоже есть)

    resteasy.jboss.org
    Это реализация, которой многие пользуются.
    В загрузках разделе "Documentation" есть гора примеров для скачки.
    Правда я ими почти не пользовался - подсматривал на работе у более опытных коллег :)
    Ответ написан
    Комментировать
  • Ошибка в настройке окружения eclipse (для автотестов)?

    timych
    @timych
    Я не очень знаком с Selenium.
    Но у вас переменные baseUri и driver не обьявлены в этом классе и не инициализированы.
    Либо они инициализированы в TestBase , но имеют неподходящий модификатор доступа (поэтому и не видны в данном класе) поставьте модификатор public (либо protected если классы в одном пакете)
    И еще вместо "extends selenium.pages.TestBase" напишите просто extends TestBase и нажмите ctrl+shift+o (organize import);
    Также непонятно зачем вам com.mysql.jdbc.Driver ?
    Вероятно вы хотели написать WebDriver.get("baseUrl + "/login.html"")
    Он откроет страницу логина.
    В общем советую чуточку почитать основы Java. Иначе тяжело будет :)
    Ответ написан
    2 комментария
  • Что значит этот код?

    timych
    @timych
    Как что?
    Создается обьект класса JSONObject.
    В него кладутся пары ключ-значение и в последнем случае еще один обьект аналогичного класса.
    JSONObject нужен для работы с JSON строками.
    Ответ написан
    2 комментария
  • Java junior developer кратчайший путь с нуля до реальной работы?

    timych
    @timych
    Не разменивайтесь на много ресурсов. Одной хорошей книги достаточно на данном этапе. Самое главное, без чего вас многие не захотят брать на работу - свой проект. КАЖДЫЙ работодатель будет у вас спрашивать, что вы написали для себя, для души. (По крайней мере у меня так было) Придумайте себе задачу. Начинайте писать. Работадатель хочет увидеть реальный код и то, что вы не теоретик. И очень немаловажно этим показать что программирование для вас больше чем просто работа. Удачи!
    Ответ написан
    3 комментария
  • Как вытащить данные из JFormattedTextField?

    timych
    @timych
    price.addKeyListener(new KeyListener() {
    
    			@Override
    			public void keyTyped(KeyEvent e) {
    			}
    
    			@Override
    			public void keyReleased(KeyEvent e) {
    				System.out.println("Price text: " + price.getText());
    			}
    
    			@Override
    			public void keyPressed(KeyEvent e) {
    			}
    		});


    Примерно так :)
    PS: И типизируйте JComboBox.
    Ответ написан
    Комментировать
  • Какую литературу посоветуете для изучения Java?

    timych
    @timych
    Я думаю что если вы ЗНАЕТЕ С++. То можно читать Герберт Шилдт "Java Полное руководство". Хорошая книга на мой взгляд.
    Ответ написан
    Комментировать
  • Как и где хранить изображения в java приложении?

    timych
    @timych
    Да конечно галлерею сделать реально. (Как и на любом языке программировани)
    Я как раз пишу свой маленький( но очень долгий :)) проект - онлайн фотохранилище (GWT + Spring + JPA + JavaFX).
    ITEXT - очень хорошая библиотека для работы с PDF . Но нужно читать условия лицензии. К примеру если вы делаете коммерческое приложение без раскрытия исходников, то последняя версия ITEXT под лицензией MPL (https://www.mozilla.org/MPL/1.1/) датируется 2009 годом.
    mvnrepository.com/artifact/com.lowagie/itext/2.1.7
    Но это не критично.
    Только непонятно зачем вам PDF, если вы хотите хранить картинки.
    Насчет того что хранить в BLOB неверно - я бы поспорил.
    Неверно хранить оригиналы больших размеров. Но если к примеру аватар весит 10-20 кб . То почему бы и нет.

    Я так понимаю вы хотите сделать десктопное приложение-клиент + удаленный сервис(серверное приложение)?
    Ответ написан
    5 комментариев
  • Где указать начальный путь диалога выбора файла?

    timych
    @timych
    Так начинаем читать Javadoc! :)
    docs.oracle.com/javase/7/docs/api/javax/swing/JFil...
    Смотрим конструкторы
    и вуаля! Находим к примеру такие варианты:
    JFileChooser()
    Constructs a JFileChooser pointing to the user's default directory.

    JFileChooser(File currentDirectory)
    Constructs a JFileChooser using the given File as the path.

    Дефолтный (JFileChooser()) конструктор открывает начиная с дефолтной папки (В вашем случае это HOME directory)
    А вот второй, с возможностью указания стартовой директории, вам и нужен.
    Либо можно позже вызвать метод setCurrentDirectory(File dir);

    Все написано в описании.

    PS: Данный вопрос к тегу "Swift" не относится :) и к "JavaFX" тоже не очень. Это Swing
    Ответ написан
    3 комментария
  • Как лучше всего организовать хранение файлов?

    timych
    @timych
    Все зависит от целей. К примеру в моем проектике много фотографий. Сами оригиналы хранятся на диске , а их превью в базе данных вместе с другой информацией. Файлы можно хранить к примеру таким образом:
    Например данные о файле записаны в базе данных с ID 35678. Тип данных поля ID в базе аналогичен типу int в Java . Значит максимальное количество символов в ID - 10. Переводим наш ID в строку вида 0000035678.
    Далее разбиваем на директории: например по два знака C:\my_file_storage\ 00\00\03\56\78.
    Создаем директорию по данному пути и кладем туда файл. (C:\my_file_storage\ 00\00\03\56\78\MyFile.dat)
    Это в случае если у вас большое количество файлов и вы хотите уникальную директорию для каждого. Так мы гарантируем что в одной директории не будет более ста директорий.
    Можно разбить покрупней.
    Можно в конечную директорию класть не по одному файлу а по многу:
    C:\my_file_storage\ 00\00\03\56\root_for_hundred_files\MyFile.dat
    (В данном случае в конечной папке не будет более ста файлов).
    Папки могут быть виртуальными - просто в БД надо хранить иерархию папок пользователя.

    Но можно сделать и реальную файловую структуру, как юзер захотел. (Но мне такой подход не очень нравится )
    Но повторюсь все зависит от целей, количества файлов, их размеров.
    Ответ написан
    Комментировать
  • Почему не вызывается метод?

    timych
    @timych
    olololosh: Я не понял - вы просто обращаетесь к переменной из другого класса? ("menuBar"). В Java так нельзя.
    Во первых метод menuCreator() класса MenuCreator у вас статический. Соответственно и обращаться к нему надо MenuCreator.menuCreator(); Но это не очень красиво. Поэтому я бы посоветовал убрать модификатор static.
    Во вторых если вы хотите получить какую-либо переменную из другого класса. она должна быть обьявлена в теле класса а не метода, как у вас. (я про menuBar)
    В третьих чтобы получить эту переменную, желательно сделать для нее "геттер", который и будет ее возвращать.
    В пятых даже еслы бы и у вас был доступ к переменной menuBar, эта строчка frame.setJMenuBar(menuBar); вызвала бы NullpointerException, так как menuCreator.menuCreator() вызывается позже.
    Короче такая мешанина - ужас.
    Вот как это примерно могло бы все выглядеть(но нужно весь код смотреть конечно ):

    package application;
    import java.awt.Font;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    
    // Этот клас может создавать нужные вам меню
    public class MenuCreator {
    
    	public JMenuBar createMenuBar() {
    		// Create menuBar
    		JMenuBar menuBar = new JMenuBar();
    		return menuBar;
    	}
    
    	public JMenu createMenu() {
    		// Create font
    		Font font = new Font("Verdana", Font.PLAIN, 11);
    		// Create File Menu
    		JMenu fileMenu = new JMenu("File");
    		fileMenu.setFont(font);
    		return fileMenu;
    	}
    }
    
    package application;
    import java.awt.Dimension;
    import javax.swing.JFrame;
    import javax.swing.JMenuBar;
    
    // в этом классе у вас происходит создание фрейма и всякая другая логика
    public class MyMainClassWithJFrame {
    
    	public static void main(String[] args) {
    
    		// ваш какой-то код...
    		JFrame frame = new JFrame();
    
    		// создаем обьект MenuCreator
    		// теперь мы можем создавать необходимые меню
    		MenuCreator menuCreator = new MenuCreator();
    		// создаем новый обьект JMenuBar
    		JMenuBar menuBar = menuCreator.createMenuBar();
    
    		frame.setJMenuBar(menuBar);
    		frame.setPreferredSize(new Dimension(800, 600));
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
    
    		// ваш какой-то код..
    	}
    }


    Да и старайтесь называть методы как-то более логично. :) Успехов!
    Ответ написан
    2 комментария
  • Как избавиться от выбрасывания экзепшена в SOAP UI?

    timych
    @timych
    Может стактрейс выложите?
    Старый wsdl также выглядит(только без токена)?
    Ответ написан
  • Какой контейнер выбрать для хранения массива float?

    timych
    @timych
    Да по моему нормальный вариант. Но я бы написал класс-обертку и даты хранил в виде time-stamp (Конечно при условии что для одной мапы они уникальные)
    class MyDatesWrapper {
          Integer uniqeWrapperId;
          Map<Long, Float> myDates;
    }
    
    Map<Integer, MyDatesWrapper>  datesWrappers;
    Ответ написан
    Комментировать
  • Простое web приложение на Java под windows?

    timych
    @timych
    asd111 Говорит правильно. PHP -для простеньких вещей самое то. Пара файлов на сервер и все работает. И с хостингом меньше проблем.
    Но если так хочется/необходимо на Java EE, то самый простой подход (он же и самый древний) это JSP странички. + сервер Tomcat или Jetty.
    Также понадобится IDE для Java EE разработки и установленный JDK.
    Вот Lars Vogel очень хорошие туториалы делает:
    www.vogella.com/tutorials/EclipseWTP/article.html
    Ответ написан
    Комментировать