我正在开发一个Java Applet,减少二进制代码的大小将使applet更快地打开并改善用户体验.
有什么办法可以减少类和/或jar文件的大小吗?我想确定我没有错过任何明显的技巧.
我知道在C++世界中,例如剥离调试符号的编译器选项可以产生巨大的差异,但我从来没有见过类似Java的东西.
我的签名Java applet在Java更新19之前一直运行正常.现在Java Update 19上的一些但不是所有用户都报告了一条java安全消息,指出我们的applet包含有符号和无符号代码.
创建applet的过程如下:
有人可以告诉我如何确定签署的代码以及我们的applet中没有签署的代码?有没有更好的方法将mysql JDBC驱动程序jar文件包含在我们的applet中,而不是将jar文件内容复制到我们的applet jar文件中?
谢谢
我们有一个相当复杂的签名小程序,自从我们几年前开发它以来一直很好用.在我们关心的所有操作系统/浏览器配置中,它可以在Java 1.5和1.6上运行良好.
它在Windows 7或Vista上的任何浏览器中都不适用于Java 1.7.我们已经看到它适用于Windows XP.此applet在Apache使用mod_proxy连接到Tomcat 6的站点中运行.
这些都是背景信息,因为我将问题简化为一个非常简单的未签名小程序:
package myapplet;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
public class MyApplet extends Applet {
private static final long serialVersionUID = 1L;
public void paint(Graphics g) {
g.drawRect(0, 0, 250, 100);
g.setColor(Color.blue);
g.drawString("Look at me, I'm a Java Applet!", 10, 50);
}
}
Run Code Online (Sandbox Code Playgroud)
如果将这个applet类放入一个jar文件中,另一个文件将jar文件的总(压缩)大小超过大约18KB,那么当由本地运行的Tomcat 6(或Apache 2.2)提供服务时,applet不会加载.
我通过向jar文件添加文本文件并更改文本文件的大小来玩.我通过在文本文件中添加一个字符来实现它从工作到不工作的程度.
查看带有跟踪的控制台日志,它正在尝试下载jar文件.这是我认为悬挂的主题:
"thread applet-com.bright.assetbank.clientsideedit.myapplet.MyApplet-1" prio=4 tid=0x048d8c00 nid=0x19b8 runnable [0x0700d000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.read1(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
- …Run Code Online (Sandbox Code Playgroud) 我正在尝试签署一个applet,以便发布者不会显示为" UNKNOWN ":

我在一个组织工作,我们有自己的证书颁发机构,证书链如下:ORG Root CA> ORG Trusted Certification Authority> Yann39(me:D)
我申请了证书,他们为我提供了一个链接,让它进入浏览器.然后我导出它(从Firefox)以获取名为mystore.p12的PKCS#12文件.
然后我做了以下签署我的applet:
/* TO KNOW THE ALIAS */
c:\testrep>keytool -list -storetype pkcs12 -keystore mystore.p12
Enter keystore password: ********
Keystore type: pkcs12
Keystore provider: SunJSSE
Your keystore contains 1 entry
id de yann39, Oct 24, 2012, keyEntry,
Certificate fingerprint (MD5): D7:E3:83:1D:C1:40:68:72:5F:A8:6F:AC:3A:EA:DD:47
/* CREATE FAKE CLASS FILE AND BUILD A JAR */
c:\testrep>echo test > test.class
c:\testrep>C:\oracle\dev10gr2\jdk\bin\jar cf0 …Run Code Online (Sandbox Code Playgroud) 昨晚发布了一个新的Java 7更新:7u65.我有一个Web应用程序,其中加载了一个服务小程序,并且在更新之后,我在不同PC上的测试没有显示问题也没有错误的行为.
后来,我开始收到与我的产品的Java服务小程序相关的问题报告.所有报告都来自将Java JRE更新为7u65(从7u60开始)的用户:
所有测试都是在清除浏览器和Java缓存之后执行的,甚至在删除已安装的证书之后(我的是有效的签名小程序).
我检查了Java 7u65发行说明,并且所提到的任何更改似乎都不会影响我的applet.此外,使用Java 7u60时没有任何问题.
我没有任何关于发生了什么的线索,也许是因为java更新是在几小时前发布的.由于即使我配置Java控制面板也无法显示Java控制台,我无法判断是否有任何异常.我无法在我的电脑中重现这个问题(Windows 8,也不是Windows 7,都是64位),但是在Windows 7 PC上已经报道了这个问题.
我的一位朋友告诉我,这似乎发生在使用Java 7u60的机器上,然后在没有卸载的情况下更新到Java 7u65.此外,这往往发生在较旧的操作系统(即:WinXP)中,这更自然.
我写这个问题是因为有些PC有这个问题似乎很奇怪,有些则没有.我想知道是否有其他人有这个问题,知道可能是什么原因,或者已经发现/应用任何解决方案.此外,如果我碰巧找到它,我想分享解决方案.
谢谢.
编辑:
外部引用,与同一Java版本(JRE)相关.
支持公告的结尾被误读为"Java不再适用于Windows XP"或"Oracle将阻止Java更新应用于Windows XP".这些陈述不正确.
我发现Gmail.com使用Flash 很奇怪,因为Flash 在网络上被认为是糟糕的(在很多方面).
Gmail使用Flash的原因是什么?
为什么不使用Java Applet或Javascript实现该功能?

当我的applet第一次从干净的环境启动时,事情按照我期望的方式工作.我产生了两个线程,一个用于通用处理,一个用于图形.我从事件调度线程执行所有GUI操作调用.从appletviewer正确处理启动/停止,但不重启/重新加载.我drawCanvas在Applet的内容窗格中将Canvas称为唯一的Component,我使用双缓冲来绘制它.
我在这里观察问题:
public void start() {
/* ... some stuff */
executeOnEDTAndWait(
new Thread() {
@Override
public void run() {
/* ... more stuff ... */
setupDrawCanvas();
if( drawCanvas.isDisplayable() ) {
drawCanvas.createBufferStrategy(2);
/* ... some more stuff */
} else {
/* This is where it runs into difficulties */
}
/* ... */
Run Code Online (Sandbox Code Playgroud)
在哪里setupDrawCanvas定义如下:
private void setupDrawCanvas() {
setVisible(false);
setIgnoreRepaint(true);
getContentPane().removeAll();
drawCanvas = new Canvas();
drawCanvas.setName("drawCanvas");
drawCanvas.setSize(
newDrawCanvasDimension.width,
newDrawCanvasDimension.height);
drawCanvas.setIgnoreRepaint(true);
getContentPane().add(drawCanvas);
getContentPane().setVisible(true);
drawCanvas.setVisible(true);
setVisible(true);
} …Run Code Online (Sandbox Code Playgroud) 在我的书(我的计算机科学课程)中,他们有源代码片段.我们谈论的是图形编程和applet.我注意到在某些情况下他扩展了JApplet,而在其他情况下他使用了Applet.
我想知道差异是什么,以及它们将如何影响代码?
最近,我的任务是创建一个图形化的刽子手游戏,其中用户试图猜测计算机的单词.我应该使用JApplet还是Applet(我们大多使用JApplet,这就是为什么我倾向于这个,但我可以去任何一种方式).
此外,我想知道applet中的基本过程应该是什么,有些人确实将所有代码放在扩展JApplet或JFrame的单个文件中.我应该这样做吗?
Java是我们拥有的最佳托管运行时技术之一.它具有非常高性能的VM,可以实现接近C的性能.高质量的开源库的数量是任何其他平台无法比拟的.然而,尽管它是第一个出现在浏览器(Applet)中的动态客户端技术,但它现在还没有被广泛使用.Java的哪些缺点使得人们使用JavaScript + HTML5或Flash/Flex而不是Java来实现RIA?我为什么要使用它们尽管它们对Java程序员来说不是那么令人愉快?
我正在尝试创建一个Applet加载器,我需要在显示的Applet上绘制,但我似乎无法找到一种方法来做到这一点.
我最初的理解是Applet,通过扩展Component就像任何常规的java.awt.Component一样,可以在Container中添加,只有覆盖paint方法,但它似乎不起作用.
在我的初始化代码中,我创建了一个java.awt.Frame,我在其上添加了我的java.awt.Container的自定义实现,它覆盖了所有的paint方法,以便它们在x:5,y:5处填充rect,大小为w:10 ,h:10调用父方法后
但是,当添加小程序时,无论在所有内容之上绘制什么,它总是如此
public class AppletTest {
public static void main(String[] args) {
Frame frame = new Frame("Applet Test!");
Container container = new Container() {
@Override
public void paint(Graphics g) {
super.paint(g);
g.fillRect(5, 5, 10, 10);
}
@Override
public void paintAll(Graphics g) {
super.paintAll(g);
g.fillRect(5, 5, 10, 10);
}
@Override
public void paintComponents(Graphics g) {
super.paintComponents(g);
g.fillRect(5, 5, 10, 10);
}
@Override
public void print(Graphics g) {
super.print(g);
g.fillRect(5, 5, 10, 10);
}
@Override
public void printComponents(Graphics g) …Run Code Online (Sandbox Code Playgroud)