标签: applet

Java Applet无法在Mac OS上的Firefox中与javascript通信吗?

我有一个在浏览器中运行的java applet,它调用一些javascript函数并期望从这些函数中得到结果.这适用于以下配置:

  • IE浏览器
  • FireFox/Windows
  • Safari/Mac

但它不适用于MAC OS上的Firefox

问题的根源似乎是始终返回null的win.eval调用.我在Mac OS X 10.4.11上使用Firefox 3.0.6进行了测试

一点代码:

JSObject win = (JSObject) JSObject.getWindow(this);
Object exp = win.eval("testfunc()");
System.out.println("exp = " + exp.toString());
Run Code Online (Sandbox Code Playgroud)

这会触发java.lang.NullPointerException(exp.toString())语句.testfunc javascript函数只返回true.

我尝试使用win.call并得到了相同的结果.

我的applet标记包含mayscript和scriptable属性.


我找到答案感谢特里斯坦.测试他的解决方案我创建了一个非常简单的测试,可以工作并以我的方式找到罪魁祸首.我确信我用一个空的testfunc()做了我的测试,它刚刚返回true,但我可能没有,因为在那种情况下它会起作用.这里真正的问题是该函数称为applet的公共方法.Liveconnect似乎无法在Firefox Mac中处理这种情况.

让我给你举个例子 :

Java类:

public class MyApplet extends Applet {  
     public int getMyValue() {
         return 5;
     }

     public void somefunction() {
         JSObject win = (JSObject) JSObject.getWindow(this);
         Object exp = win.eval("jsfunc()");
         System.out.println("exp = " + exp.toString());
     }
}
Run Code Online (Sandbox Code Playgroud)

和javascript代码:

function jsfunc() {
    var myApplet = document.getElementById("applet_id");
    return myApplet.getMyValue() + …
Run Code Online (Sandbox Code Playgroud)

javascript java macos firefox applet

12
推荐指数
1
解决办法
9970
查看次数

有谁知道gmail使用flash的原因是什么?

我发现Gmail.com使用Flash 很奇怪,因为Flash 在网络上被认为是糟糕的(在很多方面).

Gmail使用Flash的原因是什么?

为什么不使用Java Applet或Javascript实现该功能?

在此输入图像描述

javascript browser flash applet web

12
推荐指数
2
解决办法
1831
查看次数

正确处理重新加载并从AppletViewer重新启动

当我的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)

java applet swing multithreading awt

12
推荐指数
1
解决办法
1663
查看次数

JApplet和Applet之间有什么区别,我应该使用哪个?

在我的书(我的计算机科学课程)中,他们有源代码片段.我们谈论的是图形编程和applet.我注意到在某些情况下他扩展了JApplet,而在其他情况下他使用了Applet.

我想知道差异是什么,以及它们将如何影响代码?

最近,我的任务是创建一个图形化的刽子手游戏,其中用户试图猜测计算机的单词.我应该使用JApplet还是Applet(我们大多使用JApplet,这就是为什么我倾向于这个,但我可以去任何一种方式).

此外,我想知道applet中的基本过程应该是什么,有些人确实将所有代码放在扩展JApplet或JFrame的单个文件中.我应该这样做吗?

java applet

12
推荐指数
1
解决办法
2万
查看次数

为什么java applets/javafx没有被广泛使用?(为什么我不应该将它们用于RIA)

Java是我们拥有的最佳托管运行时技术之一.它具有非常高性能的VM,可以实现接近C的性能.高质量的开源库的数量是任何其他平台无法比拟的.然而,尽管它是第一个出现在浏览器(Applet)中的动态客户端技术,但它现在还没有被广泛使用.Java的哪些缺点使得人们使用JavaScript + HTML5或Flash/Flex而不是Java来实现RIA?我为什么要使用它们尽管它们对Java程序员来说不是那么令人愉快?

java html5 applet javafx

12
推荐指数
2
解决办法
6906
查看次数

在框架内的Applet上绘制

我正在尝试创建一个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)

java applet swing awt

12
推荐指数
1
解决办法
728
查看次数

getClassLoader().getResource()返回null

我有这个测试应用程序:

import java.applet.*;
import java.awt.*;
import java.net.URL;
public class Test extends Applet
{

    public void init()
    {
        URL some=Test.class.getClass().getClassLoader().getResource("/assets/pacman.png");
        System.out.println(some.toString());
        System.out.println(some.getFile());
        System.out.println(some.getPath());

    }
}
Run Code Online (Sandbox Code Playgroud)

当我从Eclipse运行它时,我收到错误:

java.lang.NullPointerException
    at Test.init(Test.java:9)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

类路径(来自.CLASSPATH文件)

<classpathentry kind="src" path="src"/>
Run Code Online (Sandbox Code Playgroud)

在我的c:\ project\src文件夹中,我只有Test.java文件和包含pacman.png的'assets'目录.

我做错了什么以及如何解决?

java applet

11
推荐指数
3
解决办法
3万
查看次数

为什么applet不需要main()?

这适用于Applet,Servlet,Midlet等的子类.

为什么他们不需要main()?如果我想创建一个Craplet始于类init()或类似的东西,它是不好的设计,不然我怎么会去这样做呢?

java applet program-entry-point

11
推荐指数
2
解决办法
2万
查看次数

如何将多个罐子组合成一个?

我已经阅读了很多这方面的文章/解释,花了太多时间,但一切都太宽泛或具体.

这个问题实际上只适用于我制作的Applet.它包含一个Class,并且需要2个其他Jar库.我已将这些包含在项目中(多个项目,因为我在Netbeans和Eclipse中尝试过这个...很容易重新创建一个Class项目).所有这一切的要点是我的HTML/web项目不应该处理多个Jar或引用它们.它根本不是一个复杂的applet /项目.

最初,我是在Netbeans中制作的.它有主包,在添加2个Jars后,它们被放在"Libraries"区域("resources"文件夹)中.在构建它之后,Netbeans为我的一个包/类创建一个Jar,然后将另外两个库放在它旁边的"lib"目录中.我希望他们在一个可分发的罐子里.从我看过的很多东西中,我尝试将以下内容放在build.xml中:

<target name="YourBigJar" depends="-post-jar">
  <jar destfile="dist/BigJar.jar">
    <zipfileset src="dist/cxapplet.jar"/>
    <zipfileset src="resources/dpotapi.jar"/>
    <zipfileset src="resources/dpotjni.jar"/>
  </jar>
</target>
Run Code Online (Sandbox Code Playgroud)

但它什么都没产生.我从NetBeans获得了这个- 在一个jar中部署所有内容.我不知道/不了解如何使用build.xml,所以如果出现问题(显然)我不会感到惊讶,但我没有收到任何错误/警告消息.

当我在Eclipse中创建它时,它有效地组合了它们,但是当我在实际的Web项目中使用Jar时,它说它无法从其他2个Jars中找到类.我不明白如何解决它,但它是一个Classpath问题?在Eclipse中,我创建一个名为"lib"的新目录并将Jars放入其中.然后,我右键单击该项目,转到"Java Build Path",然后添加Jars,同时在"Order and Export"选项卡下检查它们.从我读过的东西,我右键单击项目,选择"导出",选择"Jar",取消选中".classpath"和".project"文件,只检查"导出生成的类文件和资源",然后允许它生成清单文件.就像我说的,这会生成一个Jar,但它的内容是我的包,然后是一个"lib"目录,其中包含另外两个Jars.Manifest就在那里,但它很空,并没有引用任何文件(不确定这是否重要).当我把它放在我的网络应用程序中时,它说applet无法找到其他类.

它看起来很简单 - 一个包/类,两个外部Jars ......在构建为applet时可以组合成一个Jar.有任何想法吗?

更新:

自从我们开始使用Maven以来,有人开始使用Maven插件.所以我们最终创建了一个新的项目来容纳applet(因为它用于多个项目),并在我们pom.xml的最终使用它:

<build>
  <resources>
    <resource>
      <directory>${basedir}/applet</directory>
      <excludes>
        <exclude>codesignstore</exclude>
      </excludes>
    </resource>
    <resource>
      <directory>${basedir}/src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.2-beta-5</version>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <finalName>cxapplet</finalName>
        <archive>
          <index>true</index>
          <manifest>
            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
          </manifest>
        </archive>
        <appendAssemblyId>false</appendAssemblyId>
      </configuration>
      <executions>
        <execution>
          <id>make-my-applet-jar</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jarsigner-plugin</artifactId>
      <version>1.2</version> …
Run Code Online (Sandbox Code Playgroud)

java eclipse applet netbeans jar

11
推荐指数
1
解决办法
3万
查看次数

通过Java中的Windows 7输入方法自动切换字符宽度

我有几种用于编写(繁体中文)台湾人的输入方法,它们与Windows 7一起提供.此外,所有输入方法都有一个选项来切换字符宽度(单字节/双字节字符).

  • 中文(繁体) - 新快速
  • 中文(繁体) - 畅捷
  • 中文(繁体) - 快速
  • 中文(繁体) - 拼音
  • 中文(繁体) - 新的语音
  • 中文(繁体) - 新昌杰

如果我在Java应用程序中选择其中一个输入方法并将字符宽度设置为半角(单字节字符模式),我可以在JTextField中成功输入文本.但是,如果应用程序显示一些对话框(例如JOptionPane)或弹出窗口,则输入法字符宽度将自动更改为全角(双字节字符模式).之后,用户必须手动切换到半角字符.

我可以使用Java类"InputContext"以编程方式打开或关闭输入方法,但是我无法控制输入方法是否设置为全宽/半宽(单/双字节)字符模式.

我想也许可以从Windows输入法设置中禁用它,但是没有与字符宽度的自动切换相关的选项.

问题是:有没有办法处理(禁用)这种自动切换?

以下是使用上述输入方法对此进行测试的示例代码:

public class Example implements ActionListener {

    JFrame f = new JFrame("pasod");
    JTextField txt = new JTextField();
    Button btn = new Button("Locale");

    public Example() {

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout());
        btn.addActionListener(this);
        panel.add(btn);
        panel.add(txt);
        f.add(panel);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setSize(800, 100);
        f.setVisible(true);
    }   

    public static void main(String[] args) {
        new Example();              
    }

    public void actionPerformed(ActionEvent arg0) …
Run Code Online (Sandbox Code Playgroud)

java unicode applet swing windows-7

11
推荐指数
1
解决办法
1117
查看次数