Java-программа, использующая gnome-java, не будет компилироваться

#java #gtk #javac #gnome

#java #gtk #javac #gnome

Вопрос:

При попытке скомпилировать эту небольшую Java-программу для использования класса Notifier из java-gnome (созданного из последней ветки bzr):

 import org.gnome.notify;


class Notifier {

public void Main(String[] args) {

        Notification n = new Notification("Test notification", "Blah.", "");
        n.setTimeout(2000);
        n.show();

    }
}
  

Я получаю следующий вывод при компиляции с:

 $ javac -cp .:/usr/local/share/java/gtk-4.0.jar Notifier.java 

Notifier.java:1: package org.gnome does not exist
import org.gnome.notify;
            ^
Notifier.java:7: cannot find symbol
symbol  : class Notification
location: class Notifier
Notification n = new Notification("Test notification", "Blah.", "");
    ^
Notifier.java:7: cannot find symbol
symbol  : class Notification
location: class Notifier
Notification n = new Notification("Test notification", "Blah.", "");
                         ^
3 errors
  

/usr/local/share/java/gtk-4.0.jar определенно существует в этом расположении и содержит используемые классы. Что не так? Большое спасибо.

Ответ №1:

Возможно, это просто опечатка в вашем вопросе, но строка импорта должна гласить:

 import org.gnome.notify.*;
  

Обратите внимание на завершающую звездочку.

Кроме того, ваш main метод должен быть статическим.

Ответ №2:

Даже если вы будете следовать Rich (который абсолютно прав), ваше приложение не будет компилироваться. Вот минималистичный пример:

 import org.gnome.gdk.Event;
import org.gnome.gtk.Gtk;
import org.gnome.gtk.Widget;
import org.gnome.gtk.Window;
import org.gnome.notify.Notification;

public class Main {

    public static void main(String[] args) {

        // gtk init
        Gtk.init(args);

        // create main window
        final Window window = new Window();

        // connect delete event to main window
        window.connect(new Window.DeleteEvent() {
            public boolean onDeleteEvent(Widget source, Event event) {
                Gtk.mainQuit();
                return false;
            }
        });

        // create notification
        Notification notification = new Notification("foo", "bar", "baz", window);

        // show widgets
        window.show();
        notification.show();

        // main loop
        Gtk.main();
    }
}
  

Строка компилятора:

 javac -classpath $CLASSPATH:/usr/local/share/java/gtk-4.0.jar Main.java
  

Комментарии:

1. Спасибо, ребята. Поскольку моя программа была cli, мне фактически понадобился только Gtk.init (аргументы) и импорт org.gnome.gtk.Gtk, но это полезно знать для надлежащих приложений GTK в будущем.

2. Извините за задержку с моим ответом, кстати.