Для моего приложения Java мне нужно нечто похожее на Android Toast. Чтобы поделиться им с моими сотрудниками и повторно использовать эту часть кода в будущем, я создал свой проект Toast как собственный проект, чтобы быть библиотекой, которую можно импортировать.Невозможно показать библиотеку JFrame
У меня нет проблем с самим проектом тоста. На самом деле он работает, как и ожидалось, при тестировании непосредственно в Eclipse в его основном методе.
После этой положительной обратной связи я экспортировал ее как библиотеку (jar) и импортировал ее в класс моего основного проекта (имеет графический интерфейс Swing). Я назвал конкретный метод, который должен показывать тост, но ничего не происходит. Нет сообщения об ошибке, просто ничего. Я добавил несколько println
, чтобы узнать, достиг ли я кода, что я определенно сделал. Поэтому вызываемый метод из моей библиотеки должен быть выполнен, но как-то это не так. Тост - простой, не украшенный и полупрозрачный JFrame
. Поэтому тост-код достаточно прост:
// class extends JFrame
public Toast(String msg, int x, int y, int width, int height, Font font, Color background, Color foreground) {
setUndecorated(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setAlwaysOnTop(true);
setBackground(new Color(0f, 0f, 0f, 1f/3f));
setBounds(x, y, width, height);
contentPane = new ToastPane(background);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
SpringLayout sl_contentPane = new SpringLayout();
contentPane.setLayout(sl_contentPane);
JLabel label = new JLabel(msg);
label.setFont(font);
label.setForeground(foreground);
sl_contentPane.putConstraint(SpringLayout.WEST, label, 5, SpringLayout.WEST, contentPane);
sl_contentPane.putConstraint(SpringLayout.SOUTH, label, 85, SpringLayout.NORTH, contentPane);
sl_contentPane.putConstraint(SpringLayout.EAST, label, 385, SpringLayout.WEST, contentPane);
label.setHorizontalAlignment(SwingConstants.CENTER);
sl_contentPane.putConstraint(SpringLayout.NORTH, label, 5, SpringLayout.NORTH, contentPane);
getContentPane().add(label);
}
Метод, который используется, чтобы показать тост с внешней стороны (от моего основного-проекта):
public static void showToast(String msg, int x, int y, int width, int height, Font font, Color background, Color foreground, int displayTime)
{
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
boolean isPerPixelTranslucencySupported = gd.isWindowTranslucencySupported(PERPIXEL_TRANSLUCENT);
if(!isPerPixelTranslucencySupported)
{
System.out.println("Per-pixel translucency is not supported");
System.exit(0);
}
Toast toast = new Toast(msg, x, y, width, height, font, background, foreground);
toast.setVisible(true);
closeToast(displayTime, toast);
}
Последний метод распоряжается JFrame из тост после определенного количества миллисекунд:
private static void closeToast(int displayTime, Toast toast)
{
final Timer timer = new Timer(displayTime, null);
timer.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
toast.dispose();
}
});
timer.start();
}
Мой главный-проект звонит тост следующий способ:
public void showToast()
{
EventQueue.invokeLater(new Runnable(){
public void run()
{
try
{
System.out.println("Going to show the toast!");
Toast.showToast(message, x, y, width, height, font, background, foreground, displayTime);
} catch(Exception e)
{
e.printStackTrace();
}
}
});
}
println
дает мне обратную связь, что я добираюсь до линии Toast.showToast(...)
, распечатывая "Going to show the toast!"
.
Кто-нибудь знает, почему основной метод тоста-проекта показывает тост правильно, но импортировать его в качестве библиотеки нет?
* «.. похоже на Android Toast. Чтобы поделиться им с моими сотрудниками и повторно использовать эту часть кода в будущем, я создал свой проект Toast ..» * Я сомневаюсь, что вы могли бы создать Android основанный на Java-приложении. и пусть он работает должным образом. Создайте проект Java с самого начала и работы. –
Если вы цитируете, пожалуйста, сделайте это правильно. Я написал _ «Для моего ** Java-приложения ** я хотел что-то ** похожее на Android Toast» _. Это приложение на основе Java. Как я уже сказал в своем сообщении, мой «Toast-project» - это Java-приложение с неразделенным, полупрозрачным JFrame (Swing). Он похож только на Android Toast, потому что он немного черный, полупрозрачный, с текстом в нем, и он исчезнет через 5 секунд. Я НЕ использовал Android Toast. Я создал собственный «Java-Toast». Так что это проект Java с самого начала. – KJaeg
Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). –