使用Java获取系统信息(嵌入网页中)

3

有没有一种方法可以获取系统信息,比如处理器/内存等(最好跨平台,在浏览器中实现)?

我想在网站中实现这个功能,所以需要使用Flash或Java小程序。


清楚明确一点,您需要一个小程序还是一些服务器端的代码? - daveb
daveb: 我在寻找一些小程序来完成这个任务。 - Anant
4个回答

2

试用这个小程序。

import com.sun.servicetag.SystemEnvironment;
import java.lang.management.ManagementFactory;
public class Config extends java.applet.Applet{
   public void paint(java.awt.Graphics g){
        g.drawString("Hi.. This is Venkatesh..",50,10);
        SystemEnvironment se = SystemEnvironment.getSystemEnvironment();
        g.drawString("CpuManufacturer:"+se.getCpuManufacturer(),50,40);
        g.drawString("HostID:"+se.getHostId(),50,60);
        g.drawString("Host Name:"+se.getHostname(),50,80);
        g.drawString("OS Architecture:"+se.getOsArchitecture(),50,100);
        g.drawString("OS Name:"+se.getOsName(),50,120);
        g.drawString("OS Verstion:"+se.getOsVersion(),50,140);
        g.drawString("Serial no:"+se.getSerialNumber(),50,160);
        g.drawString("System model:"+se.getSystemModel(),50,180);
        g.drawString("System Manufacturer:"+se.getSystemManufacturer(),50,200);
        com.sun.management.OperatingSystemMXBean mxbean = (com.sun.management.OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean();
        g.drawString("Available Processors:"+mxbean.getAvailableProcessors(),50,220);
 g.drawString("TotalRAM:"+mxbean.getTotalSwapSpaceSize()/(1024*1024*1024)+""+"GB",50,240);
  g.drawString("RAM SIZE :" + (mxbean.getTotalPhysicalMemorySize()/(1024*1024*1024))+ " GB ",50,260);
    }
}


<Applet Code="HelloWorld.class" width="150" height="150">
</Applet>

这个解决方案可能只适用于Sun JDK,因为com.sun类不是Java标准的一部分。你也不能在部署中放置一个jar文件,因为SystemEnviroment的实现不是纯Java的,所以在该类后面有像LinusSystemEnviroment和WindowsSystemEnviroment这样的实现。 - tovare

2

谢谢您的回复,Chandru,但我正在寻找一些可以在我的网站上使用的小程序。 - Anant
1
你可以使用这个来制作自己的小程序,这是一个API。 - Mahmoud Hanafy
由于依赖于为每种架构编译的本地库,因此此库无法在Applet中使用。 - tovare
1
如果您的小程序使用JNLP,那么可以使用它。https://applet-launcher.dev.java.net/是一个很好的项目,可以在旧版JRE上启用它。 - Chandra Sekar
谢谢,但那个过程更像是安装应用程序,需要用户许可等,并且还存在一些跨平台/跨JVM的可靠性问题。 - tovare
是的,它确实需要你的小程序进行签名,这将导致权限提示。然而,如果本地库及其Java API在各个平台上都能很好地工作,跨平台功能几乎可以得到保证。一个很好的例子就是JOGL和Java 3D。 - Chandra Sekar

1

关于RAM信息,请查看此线程 -> 因此使用java.lang.managament包或查看这个那个答案

要获取其他RAM信息,请执行以下操作:

Runtime.getRuntime().availableProcessors()
Runtime.getRuntime().maxMemory();

或者尝试获取有关操作系统等信息:

System.getProperties().list(System.out);

SIGAR 似乎是唯一可用的开箱即用库来完成这个任务。


我需要获取系统锁定和解锁时间,但是我在Java中没有找到任何代码来实现这一点。 - Sathish Kumar k k

1

你好,

我认为Java相对于Flash来说更为严格,就从客户端获取信息而言。

通过Capabilities类,Flash会提供一些信息。相比Java,它的安全性更为宽松,因此我认为这是您最好的选择。

package {
    import flash.display.Sprite;
    import flash.system.Capabilities;

    public class CapabilitiesExample extends Sprite {
        public function CapabilitiesExample() {
            showCapabilities();
        }

        private function showCapabilities():void {
            trace("avHardwareDisable: " + Capabilities.avHardwareDisable);
            trace("hasAccessibility: " + Capabilities.hasAccessibility);
            trace("hasAudio: " + Capabilities.hasAudio);
            trace("hasAudioEncoder: " + Capabilities.hasAudioEncoder);
            trace("hasEmbeddedVideo: " + Capabilities.hasEmbeddedVideo);
            trace("hasMP3: " + Capabilities.hasMP3);
            trace("hasPrinting: " + Capabilities.hasPrinting);
            trace("hasScreenBroadcast: " + Capabilities.hasScreenBroadcast);
            trace("hasScreenPlayback: " + Capabilities.hasScreenPlayback);
            trace("hasStreamingAudio: " + Capabilities.hasStreamingAudio);
            trace("hasVideoEncoder: " + Capabilities.hasVideoEncoder);
            trace("isDebugger: " + Capabilities.isDebugger);
            trace("language: " + Capabilities.language);
            trace("localFileReadDisable: " + Capabilities.localFileReadDisable);
            trace("manufacturer: " + Capabilities.manufacturer);
            trace("os: " + Capabilities.os);
            trace("pixelAspectRatio: " + Capabilities.pixelAspectRatio);
            trace("playerType: " + Capabilities.playerType);
            trace("screenColor: " + Capabilities.screenColor);
            trace("screenDPI: " + Capabilities.screenDPI);
            trace("screenResolutionX: " + Capabilities.screenResolutionX);
            trace("screenResolutionY: " + Capabilities.screenResolutionY);
            trace("serverString: " + Capabilities.serverString);
            trace("version: " + Capabilities.version);
        }
    }
}

示例来自: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/

为了检测速度,您需要进行基准测试。

提示:通过监视javascript、flash或java中的渲染/计算时间,您可以根据真实的性能动态地改变应用程序的行为,而不是在启动应用程序之前运行基准测试(我看到其他人这样做)。例如: 线程1:监控并更改数据(例如旋转立方体中的旋转角度)。 线程2:执行繁重的计算和渲染。

(在Java中很容易使用线程实现,但在Flash中,您需要分块处理并让繁重的代码与监视器检查如何进行)。

提示2:有很多公共基准测试,因此您可以通过运行基准测试并与基准测试结果数据库进行比较,缩小人们正在运行的CPU类型。

希望这能帮助!

干杯


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接