SystemTray 功能的差异

问题描述

我有一个 Java 应用程序,它的 SystemTray 在 Linux 中不能完全运行。我想添加新的库来测试它的功能,但无法找到。截至目前,dorkBox.SystemTray 和 dorkBox.Util 是两个正在使用的库。

是否有任何不同的库可以尝试或任何方法

以下是我的代码

package client;

import java.awt.Color;
import java.awt.Desktop;

import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.socketTimeoutException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.sql.sqlException;
import java.sql.Timestamp;

import dorkBox.systemTray.CheckBox;
import dorkBox.systemTray.Entry;
import dorkBox.systemTray.Menu;
import dorkBox.systemTray.MenuItem;
import dorkBox.systemTray.Separator;
import dorkBox.systemTray.SystemTray;
import dorkBox.systemTray.SystemTray.TrayType;
import dorkBox.systemTray.ui.swing.SwingUIFactory;
import dorkBox.util.CacheUtil;

import dorkBox.util.JavaFX;
import dorkBox.util.OS;
import hardwarelog.Clock;

import java.io.File;
import static java.lang.System.exit;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

//import javax.swing.JMenuItem;
//import javax.swing.jpopupmenu;
//import javax.swing.JSeparator;
//import javax.swing.plaf.MenuItemUI;
//import javax.swing.plaf.PopupMenuUI;
//import javax.swing.plaf.SeparatorUI;

import org.gnome.gtk.FileChooserAction;
import org.gnome.gtk.Gtk;
import org.gnome.notify.Notification;
import org.gnome.notify.Notify;
import org.json.simple.parser.ParseException;

import dorkBox.util.CacheUtil;

public class Client {
    static boolean active;
    private static Client Client;
    public static String my_ip;
    public static String email,admin,olduser;
    public static String token="";
    public static SendFile2Server sf2s=new SendFile2Server();
    public static MenuItem on;
    public static MenuItem of;
    public static SystemTray systemTray;

//    public static
//    class MyApplication extends Application {
//        public
//        MyApplication() {
//        }
//
//        @Override
//        public void start(final Stage stage) throws Exception {
//            if (Client == null) {
//                Client = new Client();
//            }
//
//            Client.doJavaFxStuff(stage);
//        }
//    }

    public static  void runclient() throws InterruptedException,IOException {
        if (SystemTray.isSupported())
        {
           
        }
        Client = new Client();
        // check app active 
        
        Appactive app = new Appactive();
        try {
           active = app.isAppActive();
        } catch (Exception ex) {
            ApiCallDetails.logger.writeLog(ex);
        } finally {
        }
        System.out.println("inside main1 "+active);
        if(!active){
            try {
                showTray();
                Clock c=new Clock(email,token,olduser);
                c.startClock();         
            }
            catch(Exception e) {
                ApiCallDetails.logger.writeLog(e);
                System.exit(0);
            }
        }
        else {
            System.exit(0);
        }
    }
    
    public Client() {
////        Getmyip ip = new Getmyip();
////        my_ip = ip.geIp();
        getSystemDetails sys= new getSystemDetails();
        ArrayList connect_ip = sys.getServerIp();
//        
//        remote_server_ip = (String) connect_ip.get(0);
        email = (String) connect_ip.get(0);
//        String port_to= (String) connect_ip.get(2);
//        port = Integer.parseInt(port_to);
        admin = (String) connect_ip.get(1);
//        prefix = (String) connect_ip.get(4);
//        remote_server_ip = "18.136.174.179";
        //user_name = "babu";
       // domain = "app";
        olduser = (String) connect_ip.get(3);
        System.out.println("url "+ApiCallDetails.API_CALL_URL);
        token=(String) connect_ip.get(2);
        systemTray = SystemTray.get();
    }

    public static void showTray() throws Exception {
        try {
        System.out.println("\n\n\n\n\n\n\n\n show \n\n\n\n\n\n\n\n");
      
        if (systemTray == null) {
           // throw new RuntimeException("Unable to load SystemTray!");
            System.exit(0);
        }
        String[] args={"",""};
        
        LocalDbOperations lb=new LocalDbOperations();
        System.out.println(SystemTray.DEBUG);
        SystemTray.DEBUG=true;
        CacheUtil.clear();
        SystemTray.FORCE_GTK2=true;
        systemTray.setimage("/usr/local/bin/Desklog-Client/nonet.png");
     
        systemTray.setStatus("No network Connection");
        ActionListener offline=new ActionListener() {

            @Override
            public void actionPerformed(java.awt.event.ActionEvent e) {
                // Todo Auto-generated method stub
                systemTray.setimage("/usr/local/bin/Desklog-Client/offline.png");
                on.setEnabled(true);
                of.setEnabled(false);
                System.out.println("offline  .....");
                 systemTray.setStatus("Offline");                                   
                 
                CaptureApplication.online=false;
                try {
                    String test_connection= sf2s.getUserConfig(email,token);
                    if(test_connection==null) {
                        try {
                            Timestamp tm=new Timestamp(Clock.getStamp());
                            lb.insertAppStatus(ApiCallDetails.connectsql,tm,0);
                        } catch (sqlException e2) {
                            // Todo Auto-generated catch block
                            e2.printstacktrace();
                        }
                    }
                } catch (SocketTimeoutException e1) {
                    // Todo Auto-generated catch block
                    ApiCallDetails.logger.writeLog(e1);
                    e1.printstacktrace();
                } catch(IOException e3) {
                    System.out.println("\n\n\there\n\n");
                    e3.printstacktrace();
                } catch (ParseException e1) {
                    // Todo Auto-generated catch block
                    e1.printstacktrace();
                }
            }
        };
        
        ActionListener online=new ActionListener() {

            @Override
            public void actionPerformed(java.awt.event.ActionEvent e) {
                // Todo Auto-generated method stub
                System.out.println("online .....");
                systemTray.setimage("/usr/local/bin/Desklog-Client/leaf.png");
                on.setEnabled(false);
                of.setEnabled(true);
                 systemTray.setStatus("Online");
                CaptureApplication.online=true;
                try {
                    String test_connection = sf2s.getUserConfig( email,1);
                        } catch (sqlException e2) {
                            // Todo Auto-generated catch block
                            e2.printstacktrace();
                        }
                    }
                } catch (SocketTimeoutException | ParseException e1) {
                    // Todo Auto-generated catch block
                    ApiCallDetails.logger.writeLog(e1);
                    e1.printstacktrace();
                }
            }
        };
        
        ActionListener myDesklog=new ActionListener() {

            @Override
            public void actionPerformed(java.awt.event.ActionEvent e) {
                // Todo Auto-generated method stub
                try {
                    Desktop.getDesktop().browse(new URI(ApiCallDetails.WEBSITE));
                } catch (IOException e1) {
                    // Todo Auto-generated catch block
                    ApiCallDetails.logger.writeLog(e1);
                    e1.printstacktrace();
                } catch (URISyntaxException e1) {
                    // Todo Auto-generated catch block
                    ApiCallDetails.logger.writeLog(e1);
                    e1.printstacktrace();
                }
//              offline.
            }
        };
        of=new MenuItem("Go Offline",offline);
        on=new MenuItem("Go Online",online);
        MenuItem logout=new MenuItem("logout",new ActionListener() {
            
            @Override
            public void actionPerformed(java.awt.event.ActionEvent e) {
                // Todo Auto-generated method stub
                 File f=new File(System.getProperty("user.home")+ApiCallDetails.ENCR_FILE_LOCATION+"/encry.des");
                if(f.exists()) {
                     f.delete();
                }
                File db=new File(System.getProperty("user.home")+ApiCallDetails.ENCR_FILE_LOCATION+"/offline.db");
                try {
                    ApiCallDetails.connectsql.close();
                } catch (sqlException e1) {
                    // Todo Auto-generated catch block
                    ApiCallDetails.logger.writeLog(e1);
                    e1.printstacktrace();
                }
                if(db.exists()) {
                     db.delete();
                }
                try {
                    Process p = Runtime.getRuntime().exec(new String[] { "/bin/bash","-c","/usr/local/bin/Desklog-Client/jre/bin/java -jar  /usr/local/bin/Desklog-Client/DesklogClient.jar" });
                } catch (IOException e2) {
                    // Todo Auto-generated catch block
                    ApiCallDetails.logger.writeLog(e2);
//                  e.printstacktrace();
                }
                System.exit(0);
            }
        });
        MenuItem link=new MenuItem("My Desklog",myDesklog);
        MenuItem user_email=new MenuItem(email);
        MenuItem version=new MenuItem("Version-1.0.6");
        on.setEnabled(false);
        systemTray.getMenu().add(user_email).setShortcut('q');
        systemTray.getMenu().add(version).setShortcut('q');
        systemTray.getMenu().add(link).setShortcut('q');
        systemTray.getMenu().add(of).setShortcut('q');
        systemTray.getMenu().add(on).setShortcut('q');
        systemTray.getMenu().add(logout).setShortcut('q');
        
        systemTray.getMenu().add(new MenuItem("Quit",new ActionListener() {

            @Override
            public void actionPerformed(java.awt.event.ActionEvent e) {
                // Todo Auto-generated method stub
                systemTray.shutdown();
                System.exit(0);
            }
        })).setShortcut('q');
        
        // case does not matt
    }
    catch(Exception e) {
        ApiCallDetails.logger.writeLog(e);
        throw new Exception();
    }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)